台灣最大程式設計社群網站
線上人數
976
 
會員總數:245228
討論主題:189098
歡迎您免費加入會員
討論區列表 >> MS SQL >> 誠心請教一個SQL查詢問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
誠心請教一個SQL查詢問題
價值 : 30 QP  點閱數:145 回應數:3

樓主

修修
初學者
50 4
499 12
發送站內信

請教有沒有方法能將下列資料表查詢成如圖結果

搜尋相關Tags的文章: [ SQL ] ,
本篇文章發表於2019-11-29 18:33
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

P陳
檢舉此回應
您的ID如果照順序不會跳號的話,可以用 交叉分析表的 TRANSFORM 來處理

如果ID 會跳號的話,要再加一個欄位
變成 ID Row (依序放入 1 2 3 1 2 3....)Loop Value
就可以作 這個 交叉分析表了
本篇文章回覆於2019-12-01 18:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

阿明
檢舉此回應
你可以參閱以下

使用 FOR XML PATH 、CTE、PIVOT 產生動態欄位統計表

https://dotblogs.com.tw/joysdw12/2013/09/10/asp-net-sql-for-xml-path-cte-pivot-dymanic-columns

一定能符合你的需求
本篇文章回覆於2019-12-03 00:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

真的有點難
檢舉此回應
alter procedure proc_qq
as
create table #kk(
id int,
loop int,
value int)

insert #kk
select 1,1,12

insert #kk
select 2,1,13

insert #kk
select 3,1,4

insert #kk
select 4,2,11

insert #kk
select 5,2,2

insert #kk
select 6,2,5

insert #kk
select 8,3,12

insert #kk
select 9,3,24

insert #kk
select 10,3,56

insert #kk
select 11,4,78

insert #kk
select 12,4,54

insert #kk
select 13,4,23

insert #kk
select 14,5,76

insert #kk
select 15,5,13

insert #kk
select 16,5,5

insert #kk
select 17,6,4

insert #kk
select 18,6,7

insert #kk
select 19,6,8

select 自動編號=identity(int,1,1),* into #rep from #kk


alter table #rep add loopid int null

declare @自動編號 int
declare @loop int
declare @loopid int

DECLARE db_cursor CURSOR FOR
SELECT 自動編號,loop,loopid from #rep
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @自動編號,@loop,@loopid

WHILE @@FETCH_STATUS = 0
BEGIN

if @自動編號=1
begin
update #rep set loopid=1 where 自動編號=1
end

if @自動編號<>1
begin
if @loop=(select loop from #rep where 自動編號=@自動編號-1)
begin
update #rep set loopid=(select loopid+1 from #rep where 自動編號=@自動編號-1) where 自動編號=@自動編號
end
end

if @自動編號<>1
begin
if @loop<>(select loop from #rep where 自動編號=@自動編號-1)
begin
update #rep set loopid=1 where 自動編號=@自動編號
end
end

FETCH NEXT FROM db_cursor INTO @自動編號,@loop,@loopid
END
CLOSE db_cursor
DEALLOCATE db_cursor

declare @sql nvarchar(2000)=''

select distinct loopid into #repA from #rep

declare @i int= 1
WHILE @i<= (select max(loop) from #rep)
BEGIN

set @sql='alter table #repA add loop'+convert(nvarchar(1),@i)+ ' int null'
execute(@sql)
set @sql='update t1 set loop'+convert(nvarchar(1),@i)+ '=t2.value from #repA t1 join #rep t2 on t1.loopid=t2.loopid where loop='''+convert(nvarchar(1),@i)+''''
-- select @sql
execute(@sql)
SET @i = @i + 1

END

select * from #repA




本篇文章回覆於2019-12-03 11:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.