台灣最大程式設計社群網站
線上人數
1653
 
會員總數:246138
討論主題:189722
歡迎您免費加入會員
討論區列表 >> MS SQL >> 多列的資料,變成一列顯示
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
多列的資料,變成一列顯示
價值 : 100 QP  點閱數:893 回應數:4
樓主

MStone Lin
門外漢
0 99
1928 132
發送站內信

我有參考此篇
http://www.blueshop.com.tw/board/FUM20041006152735ZFS/BRD2012061515373632F.html
也請教google神
但使用pivot (我的sql為2008)
必需要有一 <彙總函式>
https://technet.microsoft.com/zh-tw/library/ms177410(v=sql.105).aspx

但我如果單純只是資料切換不作任何運算

該如何寫法

我的資料表 labcheck

idno repdate dicno result
A0001 1050811 09005C 3.05
A0001 1050811 09025C 294
A0001 1050811 06012e 5-10
A0001 1050811 14037C 0.79(-)Non reactive
A0002 1050811 09005C 1.05
A0002 1050811 09025C 125
A0002 1050811 06012e 6-9
A0002 1050811 14037C 0.71(-)Non reactive

要變成
idno repdate 09005c 09025c 06012e 14037c
A0001 1050811 3.05 294 5-10 0.79(-)Non reactive
A0002 1050811 1.05 125 6-9 0.71(-)Non reactive


sql 語法
SELECT * FROM
(SELECT dicno,result2 FROM labcheck ) AS s
pivot
(
?????
fOR dicno IN([09005C],[09025C],[06012e],[14037c])
) AS p


請問
正確應該如何寫法??

謝謝~




搜尋相關Tags的文章: [ 多列 ] , [ 一列 ] , [ pivot ] ,
本篇文章發表於2016-08-11 14:52
1樓
最有價值解答

真的有點難
檢舉此回應

土法煉鋼.... 哈



create procedure proc_就是橫
as
create table #xx(
dno nvarchar(50),
repdate nvarchar(50),
dicno nvarchar(50),
result nvarchar(50)
)


insert #xx
select 'A0001','1050811','09005C','3.05'

insert #xx
select 'A0001','1050811','09025C','294'

insert #xx
select 'A0001','1050811','06012e','5-10'

insert #xx
select 'A0001','1050811','14037C','0.79(-)Non reactive'

insert #xx
select 'A0002','1050811','09005C','1.05'

insert #xx
select 'A0002','1050811','09025C','125'

insert #xx
select 'A0002','1050811','06012e','6-9'

insert #xx
select 'A0002','1050811','14037C','0.71(-)Non reactive'

select distinct dno,repdate into #xxx from #xx

declare @dicno nvarchar(50)
declare @sql nvarchar(200)=''
declare @sql1 nvarchar(200)=''

DECLARE crx CURSOR FOR
SELECT distinct dicno from #xx
OPEN crx
FETCH NEXT FROM crx into @dicno
WHILE(@@FETCH_STATUS=0)
BEGIN

set @sql='alter table #xxx add [' + @dicno + '] nvarchar(50) null'
execute(@sql)

set @sql1='update t1 set ['+@dicno+']=t2.result from #xxx t1 join #xx t2 on t1.dno=t2.dno and t1.repdate=t2.repdate and t2.dicno='''+@dicno+''''
--select @sql1

execute(@sql1)

FETCH NEXT from crx into @dicno
END
CLOSE crx

select * from #xxx
本篇文章回覆於2016-08-11 19:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

pilipala
檢舉此回應

搭配 MAX() 或是 MIN() 試看看
本篇文章回覆於2016-08-11 23:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

MStone Lin
檢舉此回應
真的用土法方式@@
本篇文章回覆於2016-11-15 14:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

pilipala
檢舉此回應
參考看看 ~~

本篇文章回覆於2016-11-16 08:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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