當前位置:首頁 » 編程語言 » sqlwithtemp

sqlwithtemp

發布時間: 2022-04-24 05:22:13

1. sql如何用with as的結果作where條件

示例代碼如下:

;with a as(select * from table_a),
b as (select * from a where id in(3,4,5))
select * from b

記得一定要有逗號間隔開兩個查詢,最後一個查詢前是沒有逗號的

2. 求救啊。下面存儲過程怎麼改,with temp as ()這里有錯誤

set @sql2='with temp as (select row_number() over (order by id) as inde, * from T_Books where '+@Field+' like ''% '+@Key+' %'' ) select * from temp where inde between (@pageIndex - 1)* @pageSize+1 and @pageIndex * '
將sql2 修改成這樣

3. SQL 查詢語句求助

--按學生分組統計選課數,按學生成績降序排名,然後過濾MSSQL2005+
Select學生,課程號,成績From
(
select*,COUNT(*)over(partitionby學生)ascnt,DENSE_RANK()over(partitionby學生orderby成績desc)
as名次from表
)swherecnt>=2and名次>1

--好像就這樣就可以了

Select學生,課程號,成績From
(
select*,DENSE_RANK()over(partitionby學生orderby成績desc)
as名次from表
)swhere名次>1

4. 問一下關於SQL語句的問題,with什麼意思,別的都是什麼意思,謝謝!!

with as 得到的數據是一次性使用的臨時數據。其中with 不是單獨一個意思,跟as組合起來後成為一個短語。

舉個例子:
with [abc] as(……)
select …… from [abc] where 條件A
select …… from [abc] where 條件B
以上語句在執行時,條件A的語句能取到數;取完數後 臨時數據[abc]就清除了;所以到條件B的語句就執行不下去了。

5. sql語句求解

select * from (
select * from table where to_date(year || month || day)<to_date(『2012』 || 『05』 || 『05』) order by to_date(year || month || day) desc)
where rownum = 1
最簡單的就是先排序,然後取得第一條,效率也就是這么樣了。
如果年月日都是數字的話,也可以用year*10000+month*100+day來比較,因為日期的大小和當成數字比較的結果是一樣的。

6. SQL數據去重後連接另外一表


createtable[表A]
([編號]varchar(10),
[姓名]varchar(20)
)


createtable[表B]
([編號]varchar(10),
[銷售]int
)
go


insertinto[表A]
values('001','A'),
('002','B'),
('002','B'),
('003','C')
go

insertinto[表B]
values('001',1000),
('002',750),
('003',11200)
go


print'方式一:------------'


selectt1.[編號],t1.[姓名],t2.[銷售]from
(selectdistinct[編號],[姓名]from[表A])ast1leftjoin
[表B]ast2ont1.[編號]=t2.[編號]

go
print'方式二:------------'

selectt1.[編號],t1.[姓名],t2.[銷售]from
(selectdistinct[編號],[姓名]from[表A])ast1,[表B]ast2wheret1.[編號]=t2.[編號]print'-------------'


truncatetable[表A]
droptable[表A]


truncatetable[表B]
droptable[表B]

go

希望能幫到你!

7. 一個棘手的SQL條件限制

createtableT
(
IDint,
AIDint,
BIDint
)

--Aid=1,BID=1,2在查詢結果中
insertintoTvalues(1,1,1)
insertintoTvalues(2,1,2)
insertintoTvalues(3,1,3)
insertintoTvalues(4,1,4)

--Aid=2隻有一條,不管Bid多少都在查詢結果中
insertintoTvalues(5,2,7)

--Aid=3,只有Bid=2在查詢結果中
insertintoTvalues(6,3,2)
insertintoTvalues(7,3,3)
insertintoTvalues(8,3,4)

--Aid=4,Bid=1在查詢結果中
insertintoTvalues(9,4,1)
insertintoTvalues(10,4,1)

SelectID,AID,BidFrom
(
Select*,COUNT(*)Over(PARTITIONbyAid)AsY
FromT
)sWhere(BIDin(1,2))orY=1

8. sql存儲過程用遞歸

表結構:
sale_area銷售分區表
PK#area_id
class_id
gonghao

prod_class產品分類表
PK#class_id
class_name

問題sql語句:
select distinct pa.class_id from prod_class As pa,prod_class As pb,sale_area where pb.class_id in(select sale_area.class_id from sale_area where sale_area.gonghao=<param>) and pa.class_id like pb.class_id||'%'

問題定義:
根據傳入的參數gonghao來確定對應的class_id集,然後遍歷這個class_id集,並「擴充」這個集合
要理解「擴充」必須知道class_id是這樣設等級:
0為最高級
|_01
| |_011
| |_012
|_02
|_011
|_012
那麼擁有等級0的話,所有的等級都應該可以訪問,擁有等級01的話,011、012也可以訪問。
這句sql的目的就是得到當前員工能訪問的所有產品分類及它的子集。

通過自連接的做法在Oracle里是對的,在DB2里就錯,原因在於DB2中謂詞like兩邊至少有一個是字元串,也就是說DB2不認為pb.class_id||'%'是字元串。

求解:
要完成上面的任務有什麼可替代的辦法或改進的地方,注意環境是DB2 UDB 7.2。
---------------------------------------------------------------

就是樹的問題。
使用公共表達式可以完成。
你在信息中心裏面按recusion去搜索,可以找到遞歸sql的寫法。
---------------------------------------------------------------

問題寫的很清楚,我喜歡!
如果要使用DB2的公共表達式建議你把
prod_class產品分類表結構改一下
PK#class_id
class_name
Parent_Class_id

sql語句如下:

with temp_class_id( class_id,class_name)
(
select pc.class_id,pc.class_name from prod_class pc
where pc.class_id in (select sale_area.class_id from sale_area
where sale_area.gonghao=<param>)
union
select pc.class_id,pc.class_name from prod_class pc,
temp_class_id tc
where pc.parent_id = tc.class_id)
select * from temp_class_id;

9. 如何用sql語句 把倆個欄位值加到一塊

SQL 2005 以上版本可用:

WITH temp AS
(
SELECT [login],
CASE WHEN LEFT([agent], 6) = 'Agent/' THEN SUBSTRING([agent], 7, LEN([agent]) - 6) ELSE [agent] END AS [agent]
FROM [table1]
)
SELECT SUM([login]), [agent]
FROM [temp]
GROUP BY [agent]

10. SQL資料庫中臨時表,臨時變數和with as關鍵詞創建「臨時表」的區別

SQL資料庫中數據處理時,有時候需要建立臨時表,將查詢後的結果集放到臨時表中,然後在針對這個數據進行操作。
創建「臨時表」(邏輯上的臨時表,可能不一定是資料庫的)的方法有一下幾種:
1.with tempTableName as方法(05之後出現):
with temptable as 其實並沒有建立臨時表,只是子查詢部分(subquery factoring),定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供數據的部分。特別對於UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執行一遍即可。
http://www.cnblogs.com/zhaowei303/articles/4204805.html

熱點內容
格物致知編程 發布:2025-07-16 18:07:54 瀏覽:947
戴爾伺服器系統設置如何設置 發布:2025-07-16 18:02:09 瀏覽:958
為什麼換安卓這么難 發布:2025-07-16 17:14:44 瀏覽:421
轉動密碼鎖怎麼開 發布:2025-07-16 17:14:37 瀏覽:611
伺服器和網關ip 發布:2025-07-16 17:09:35 瀏覽:930
如何用net映射伺服器盤符 發布:2025-07-16 17:08:50 瀏覽:13
小飛機android 發布:2025-07-16 16:51:00 瀏覽:236
python獲取api 發布:2025-07-16 16:35:28 瀏覽:740
安卓應用耗電優化是什麼 發布:2025-07-16 16:29:39 瀏覽:502
惠普電腦都有什麼配置的 發布:2025-07-16 15:51:49 瀏覽:520