當前位置:首頁 » 編程語言 » sql動態列轉行
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql動態列轉行

發布時間: 2022-02-26 22:12:50

sql動態列轉行,該怎麼解決

SELECT INDEXDEF , REGEXP_SUBSTR(GRADECODE , '[^,]+', 1, LEVEL, 'i') GRADECODE FROM tt CONNECT BY LEVEL

㈡ sqlserver如何列轉行

CREATETABLE#test(
snINT,
enINT
);

INSERTINTO#testVALUES(1,5);
INSERTINTO#testVALUES(6,7);
INSERTINTO#testVALUES(8,8);
INSERTINTO#testVALUES(9,12);
go


SELECTDISTINCT
m.number
FROM
#testt
JOINmaster..spt_valuesm
ON(
t.sn<=m.number
ANDt.en>=m.number
);
go


查詢結果:

number
-----------
1
2
3
4
5
6
7
8
9
10
11
12

(12行受影響)

㈢ sql列轉行,如何把表轉化為這個結果一共一行 一列.如何實現.

通用的辦法是用動態sql解決:

declare@sqlvarchar(2000);
set@sql='select''';
select@sql=@sql+列名+','from表名;
select@sql=left(@sql,len(@sql)-1)+''''
exec(@sql);

此外,SQL Server2005以上版本可以用XML Path解決。

SELECT列名+','FROM表名FORXMLPATH('')

這樣將直接得到'a,b,c,d,d,e,',需要進一步處理去掉最後的逗號

㈣ sqlserver列轉行 查詢

select*fromA_14072201

IDUSERID
4685938130
46859888
4681138130
4681137761
4647037836
4647037836
4643037836
4643037836
selectID,USERIDfromA_14072201
whereIDin(selectIDfrom(selectID,USERIDfromA_14072201groupbyID,USERID)astableAgroupbyIDhavingCOUNT(*)=2)

IDUSERID
4685938130
46859888
4681138130
4681137761
selecttable1.ID,table1.USERID,table2.USERID
from(selectID,USERIDfrom(selectID,USERID,ROW_NUMBER()over(orderbyID)ROWNUMBERfromA_14072201whereIDin(selectIDfrom(selectID,USERIDfromA_14072201groupbyID,USERID)astableAgroupbyIDhavingCOUNT(*)=2))astableBwhereROWNUMBER%2=1)table1
innerjoin
(selectID,USERIDfromA_14072201whereIDin(selectIDfrom(selectID,USERIDfromA_14072201groupbyID,USERID)astableAgroupbyIDhavingCOUNT(*)=2))table2
ontable1.ID=table2.IDandtable1.USERID<>table2.USERID

IDUSERIDUSERID
468113813037761
4685938130888
--結果是對的,寫的有點亂,你捋一捋然後優化一下,優化不了就直接改成表值函數去處理,我工作去了,話說你這個問題是半夜2:39發的,要注意身體啊。

㈤ SQLSERVER 列轉行

第一:你的時間維度表基本沒有意義,微軟SSIS中心認為時間維度至少由日期構成主鍵。可以認為是最小基本業務顆粒。

來個Sample,更復雜的在我空間里。但是道理是一樣的。都是藉助動態SQL和一些函數。

----------------------------------------------------------------
/*
作者:Edwin
資料庫:SQLSERVER2005+
作用:指定時間區間的自然周有幾天,如果垮年度,由外圍驗證
Version1.0
Copyright(c)2015,SQLSERVER2008
*/
----------------------------------------------------------------
/*參數設定區域,參數為開始時間和結束時間*/
----------------------------------------------------------------
declare@FDateDateTimeset@FDate='2014-09-0100:00:00.000'
declare@EdateDateTimeset@Edate='2015-01-0100:00:00.000'
----------------------------------------------------------------
/*SQL主體*/
----------------------------------------------------------------
declare@WeekHeadernvarchar(max)
select@WeekHeader=coalesce(@WeekHeader+',['+cast(WeekOfYearasvarchar)+']','['+cast(WeekOfYearasvarchar)+']')
from
(
selectWeekOfYearfromComn.CalendarwhereDatePerDay>=@FDateandDatePerDay<@EdategroupbyWeekOfYear
)M
declare@PivotSQLnvarchar(max)set@PivotSQL=N'
select
Yearas年份,'+@WeekHeader+'
from
(
select[Year],WeekOfYear,DatePerDayfrom[DT_WareHouse].[Comn].[Calendar]whereDatePerDay>=@FDateandDatePerDay<@Edate
)M
pivot
(
count(DatePerDay)for[WeekOfYear]in('+@WeekHeader+')
)PVT'
execsp_executesql@PivotSQL,N'@FDatedatetime,@Edatedatetime',@FDate,@Edate

執行結果:

㈥ sql動態多行轉列,PIVOT怎麼能轉兩列

樓上那個用過sqlserver嗎?

PIVOT是支持的!!!!!

不過看你的語法,肯定報錯。PIVOT最好基於SELECT * 並且先把全部需求的欄位轉換未列:

select * from

(select CONVERT(varchar(100),年月)+'受理' 欄位,sum(受理數量) 數量 from

表a

GROUP BY 年月

UNION ALL

select CONVERT(varchar(100),年月)+'辦結'欄位,sum(辦結數量) 數量 from

表a

GROUP BY 年月)v

PIVOT ( MAX(v.數量) FOR v.欄位 IN ( [2019-01受理],

[2019-02受理],

[2019-03受理],

[2019-04受理],

[2019-01辦結],

[2019-02辦結],

[2019-03辦結],

[2019-04辦結] )) 網路知道回答用

㈦ sql語句列轉行

我整理的行轉列的問題:

--創建tb表
createtabletb(姓名varchar(10),課程varchar(10),分數int)
insertintotbvalues('張三','語文',74)
insertintotbvalues('張三','數學',83)
insertintotbvalues('張三','物理',93)
insertintotbvalues('李四','語文',74)
insertintotbvalues('李四','數學',84)
insertintotbvalues('李四','物理',94)
go

select*Fromtb

--SQLSERVER2000靜態行轉列
select姓名as姓名,
max(case課程when'語文'then分數elsenullend)語文,
max(case課程when'數學'then分數elsenullend)數學,
max(case課程when'物理'then分數elsenullend)物理
fromtb
groupby姓名

--SQLSERVER2000動態SQL,指課程不止語文、數學、物理這三門課程。(以下同)
declare@sqlvarchar(8000)
set@sql='select姓名'
select@sql=@sql+',max(case課程when'''+課程+'''then分數else0end)['+課程+']'
from(selectdistinct課程fromtb)asa
set@sql=@sql+'fromtbgroupby姓名'
exec(@sql)

--SQLSERVER2005靜態SQL。
select*from(select*fromtb)apivot(max(分數)for課程in(語文,數學,物理))b

--SQLSERVER2005動態SQL。
declare@sqlvarchar(8000)
select@sql=isnull(@sql+'],[','')+課程fromtbgroupby課程
set@sql='['+@sql+']'
exec('select*from(select*fromtb)apivot(max(分數)for課程in('+@sql+'))b')

希望對你的學習有幫助。

㈧ sql 2000 結合兩張表「動態」實現 行轉列

第一步,sql拼接:

select'sum(casewhenarea='''||area||'''then1else0end)'asrows
fromtable

然後取得上面結果的記錄集,組合拼接 進行第二步,示例如下:

selectbDate,sum(casewhenarea='保養一區'then1else0end)as保養一區,
sum(casewhenarea='保養二區'then1else0end)as保養二區,
sum(casewhenarea='保養三區'then1else0end)as保養三區,
sum(casewhenarea='保養四區'then1else0end)as保養四區,
sum(casewhenarea='保養五區'then1else0end)as保養五區

fromtable
groupbybDate

㈨ sql 動態行轉列只能寫存儲過程嗎

如果使用的頻率不高,可以不用寫成存儲過程,定義個臨時變數執行下
如果使用頻率高還是用存儲過程把,sql代碼涉及字元串拼接,建議用存儲過程封裝起來好。