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