iT邦幫忙

0

查詢條件變欄位名稱 SQL指令怎麼寫?

XYZ 2024-03-15 10:06:141586 瀏覽
  • 分享至 

  • xImage

大家好,

<圖一>查詢條件是YEARS,查詢結果如<圖一>,
SQL指令怎麼寫才能將<圖一>查詢條件(YEARS)變成欄位名稱如<圖二>的黃色底欄位呢?

備註:查詢條件不是固定值,依USER查詢有不同的年度

<圖一>
https://ithelp.ithome.com.tw/upload/images/20240315/20108157tQ3TcpfiE3.png

<圖二>
https://ithelp.ithome.com.tw/upload/images/20240315/20108157glxkKdc9U7.png

看更多先前的討論...收起先前的討論...
alien663 iT邦研究生 3 級 ‧ 2024-03-15 13:30:39 檢舉
我想這會是你需要的語法

https://ithelp.ithome.com.tw/articles/10332315
尼克 iT邦大師 1 級 ‧ 2024-03-15 15:35:10 檢舉
google 關鍵字SQL row to column
XYZ iT邦新手 4 級 ‧ 2024-03-15 17:16:29 檢舉
查詢條件不是固定值,無法用 PIVOT in 固定值
(

FOR Years IN ([112], [113]....)
) AS pivotTable;
那邊規定必須要固定值~你無法變更SQL規則~
只能用動態取得欄位後~在傳入SQL組欄位後顯示~
除非微軟在新版本的SQL命令有增加新的語法~才有可能~
但你的SQL Server也要升級到最新版本才行~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
純真的人
iT邦大師 1 級 ‧ 2024-03-15 13:38:52

參考~

create table TmpTable(
	Years int
	,List nvarchar(50)
	,Cost nvarchar(50)
)
insert into TmpTable
values('112','書包','9.4%')
,('112','筆','12.1%')
,('112','尺','40.3%')
,('113','書包','9.1%')
,('113','筆','12.6%')
,('113','尺','40.4%')

declare @MaxStr nvarchar(max)

select @MaxStr=stuff((
	select ',[' + Convert(varchar,Years) + ']'
	from TmpTable
	group by Years
	for xml path('')
),1,1,'')

declare @Sql nvarchar(max) = N'
	select *
	from TmpTable
	pivot(
		max(Cost)for Years in(' + @MaxStr + ')
	) pt
'
exec sp_executesql @Sql

drop table TmpTable

https://ithelp.ithome.com.tw/upload/images/20240315/200613699gYXo4b9q9.png

rogeryao iT邦超人 7 級 ‧ 2024-03-16 10:44:04 檢舉

查詢條件不是固定值,無法用 PIVOT in 固定值 .....
太奇怪了

https://dbfiddle.uk/PJ1GNoUG
先在 TmpTableX 處理要篩選的條件即可

rogeryao
我是認為版主要這段可以隨意下條件要顯示的欄位~
不用二次下SQL
也就是不可以再用 exec sp_executesql @Sql 這句^^a
例如這樣~

	pivot(
		max(Cost)for Years in(
            select Years
            from table
            where Years in(112,113)
        )
	) pt

我要發表回答

立即登入回答