sqlwithtempas
⑴ 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
記得一定要有逗號間隔開兩個查詢,最後一個查詢前是沒有逗號的
⑵ 如何用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]
⑶ 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
⑷ 幫忙看下這條sql查詢怎麼優化一下好
不知道你表的索引,所以單獨從你的sql表面來說,盡量把復用的sql抽離出來形成中間數據集,這樣會節省運行消耗。如果內查詢數據量較大的話,把not in改成not exists的寫法,有問題再追問吧,希望對你有幫助,望採納。
withtempas(
selectaidfromactive
whereaidin
(selectidfromachievements
wherezhuid=2
andclass='ZMKM游戲'
andconvert(varchar(10),regtime,120)=convert(varchar(10),'2013-11-15',120))
andciin(2,3)
and(isok=1oronline=1)
)
selectid,account,passwordfromachievements
whereidin
(
selectaidfromtempwhereci=2andisok=1
)
andidnotin
(
selectaidfromtempwhereci=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
⑹ 求救啊。下面存儲過程怎麼改,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 修改成這樣
⑺ 求一個SQL,連續重復的取最後一條。
if exists (select * from sysobjects where name='temp_1' and type='U')
drop table temp_1
select * into temp_1 from [表名] where ID is null
declare @ID varchar(10) ,@VehicleSimID varchar(32),@GPSTime datetime,@GPSLongitude decimal(15,6)
declare @GPSlatitude decimal(15,6),@GPSSpeed varchar(10),@GPSDirection varchar(10),@PassengerState varchar(2)
declare cursor_test cursor for select ID,VehicleSimID,GPSTime,GPSLongitude,GPSlatitude,GPSSpeed,GPSDirection,PassengerState
from [表名]
open cursor_test
fetch next from cursor_test into @ID,@VehicleSimID,@GPSTime,@GPSLongitude,@GPSlatitude,@GPSSpeed,@GPSDirection,@PassengerState
while @@fetch_status=0
begin
if exists(select * from temp_1 where VehicleSimID=@VehicleSimID and PassengerState=@PassengerState and GPSTime<@GPSTime)
delete temp_1 where VehicleSimID=@VehicleSimID and PassengerState=@PassengerState
insert into temp_1
select @ID,@VehicleSimID,@GPSTime,@GPSLongitude,@GPSlatitude,@GPSSpeed,@GPSDirection,@PassengerState
fetch next from cursor_test into @ID,@VehicleSimID,@GPSTime,@GPSLongitude,@GPSlatitude,@GPSSpeed,@GPSDirection,@PassengerState
end
close cursor_test
deallocate cursor_test
select * from temp_1 order by VehicleSimID asc,GPSTime asc
⑻ 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來比較,因為日期的大小和當成數字比較的結果是一樣的。
⑼ 【求各位大神!】SQL查詢出本月所有日期
--MSSQL
--查詢出本年所有日期:
SELECTCONVERT(VARCHAR(10),DATEADD(DD,number,DATENAME(YY,GETDATE())+'0101'),23)
FROMmaster..spt_values
WHEREtype='p'ANDnumber<=DATEDIFF(DD,DATENAME(YY,GETDATE())+'0101',DATENAME(YY,GETDATE())+'1231')
--查詢出本月所有日期:
SELECTCONVERT(VARCHAR(10),DATEADD(DD,number,DATENAME(YY,GETDATE())+DATENAME(MM,GETDATE())+'01'),23)
FROMmaster..spt_values
WHEREtype='p'ANDnumber<DAY(DATEADD(MM,1,GETDATE())-DAY(GETDATE()))