0
A
回答
0
你可以這樣做,我沒有睾丸希望它會工作;)
create table #Result (
ID nvarchar(10),
[Date] datetime,
[DrugIndex] int,
Drug1 nvarchar(1000))
DECLARE @ID nvarchar(10),
@Date datetime,
@Drug nvarchar(1000)
DECLARE crResult CURSOR FOR SELECT ID,[Date],[Drug] FROM tblSource
OPEN crResult
FETCH NEXT FROM crResult INTO @ID,@Date,@Drug
WHILE @@FETCH_STATUS=0
BEGIN
IF EXISTS(SELECT * FROM #Result WHERE [email protected] AND [Date][email protected])
BEGIN
DECLARE @Index int
SET @Index=(SELECT DrugIndex FROM #Result WHERE [email protected] and [Date][email protected])
SET @[email protected]+1
DECLARE @sqlCmd nvarchar(1024)
SET @sqlCmd='ALTER TABLE #Result ADD Drug'+CONVERT(nvarchar(10),@Index)+' nvarchar(1000)'
EXECUTE (@sqlCmd)
SET @sqlCmd='UPDATE #Result SET [DrugIndex]='+CONVERT(nvarchar(10),@Index)+', [Drug'+CONVERT(nvarchar(10),@Index)+
']='''[email protected]+''' WHERE ID='+CONVERT(nvarchar(10),@ID)+''' AND [Date]='''+CONVERT(nvarchar(20),@Date)+''''
EXECUTE (@sqlCmd)
END
ELSE
INSERT INTO #Result(ID,[Date],DrugIndex,[Drug1]) VALUES @ID,@Date,1,@Drug
FETCH NEXT FROM crResult INTO @ID,@Date,@Drug
END
CLOSE crResult
DEALLOCATE crResult
0
declare @t table (id int, dt date, drug varchar(100)); -- for example only
insert into @t values
(1, '20160106', 'a'),
(1, '20160106', 'b'),
(1, '20160106', 'c'),
(1, '20160106', 'd'),
(1, '20160106', 'e'),
(1, '20160511', 'a'),
(1, '20160511', 'c'),
(1, '20160511', 'd');
if object_id('tempdb..#tmp') is not null drop table #tmp;
select *,
row_number() over (partition by dt order by 1/0) as rn
into #tmp
from @t; -- put here your table
declare @cols_drug varchar(4000) =
stuff(
(select ',' + quotename(cast(rn as varchar(10))) +' as drug' + cast(rn as varchar(10)) as [text()]
from (select distinct rn from #tmp) t
order by rn
for xml path(''), type).value('.[1]', 'varchar(max)'), 1, 1, '');
declare @cols_num varchar(4000) =
stuff(
(select ',' + quotename(cast(rn as varchar(10))) as [text()]
from (select distinct rn from #tmp) t
order by rn
for xml path(''), type).value('.[1]', 'varchar(max)'), 1, 1, '');
declare @sql varchar(8000) = 'select id, dt, ' + @cols_drug +
' from #tmp t pivot (max(drug) for rn in (' + @cols_num + '))p';
exec(@sql);
相關問題
- 1. sql - 從一列到另一列的值(單獨的數據庫)
- 2. 在一列單獨的兩行兩列
- 3. 單獨數據到陣列
- 4. 的MySQL將數據移動到另一列,如果數據已經在該列
- 5. 兩列拉動單獨行的值。我如何獲得同一行的數據?
- 6. 在MATLAB找到獨特的行同時列有不同的數據類型
- 7. LINQ在.NET的行不同的行的單獨的列值
- 8. 我怎樣才能顯示多行數據在同一行與單獨的列
- 9. 如何將同一列中的數據放入單獨的列中?
- 10. 如何執行從兩個不同的列到單獨的表上的同一列的聯接
- 11. SQL單獨一列的數
- 12. 轉換行數據到不同的列
- 13. 單獨的1列數據,以2列
- 14. 移調多個列到一行的MySQL
- 15. 移調一對列的成單列
- 16. 移調列表中的數據行
- 17. 如何在單獨的行上顯示列表中的數據
- 18. 將數據從一行轉移到列
- 19. 如何從結果集返回不同列的兩個單獨列出的MyBatis
- 20. 如果列數據不同,則獲取組的行數
- 21. 在單獨的列中繪製數據
- 22. 移調在python數據幀一列
- 23. 在單個字段而不是單獨的列中添加列查詢結果
- 24. 在不同的行上列出單獨的IP地址
- 25. 如何在兩列中選擇不同的行和排序無論是單獨
- 26. 移動數據到單個列在Excel
- 27. Django的: 「列不存在」,同時運行數據遷移
- 28. TSQL移調單列爲行
- 29. 移調一個單列多行
- 30. 移調在SQL Server中的數據到下一列的某些行2008
Possibl e [SQL Server PIVOT列數據]的副本(http://stackoverflow.com/questions/1984306/sql-server-pivot-column-data) – iamdave