我想创建一个来自多个记录的查询作为一条记录,但我不想使用Pivot,FYI,我有> 260记录,如果我写手动PIVOT是不可能的, 有没有简单的解决方案?
这里是表格示例:
ID Element_Name Value
1 Parmitha 100
2 Anggun 200
3 Chandra 300
4 BagusofTerror 400
5 Laras 500
6 Jessica 600
7 Aisyah 700
......
200 Sonya 20000
我希望结果是这样的:
paramitha , anggun, chandra , bagusofterror, Laras , Jessica , Aisyah, ..... , Sonya
100 , 200, 300, 400,500,600,700,....,20000
答案 0 :(得分:3)
参考http://blog.sqlauthority.com/2009/12/21/sql-server-comma-separated-values-csv-from-table-column-part-2/,您可以使用以下SQL查询
我没有运行这个,所以我不是100%肯定它会工作
SELECT STUFF(
(SELECT ',' + s.ElementName
FROM tableName s
FOR XML PATH('')),1,1,'')
UNION ALL
SELECT STUFF(
(SELECT ',' + s.Value
FROM tableName s
FOR XML PATH('')),1,1,'')
答案 1 :(得分:0)
我们曾经称之为交叉表查询。不确定它是否还是......
SELECT SUM(CASE WHEN id=1 THEN value ELSE 0 END) AS parmitha,
SUM(CASE WHEN id=2 THEN value ELSE 0 END) AS anggun,
SUM(CASE WHEN id=3 THEN value ELSE 0 END) AS chandra,
...etc...
SUM(value) AS total
FROM My_Table
WHERE ...etc...
我不知道c#,但我确信你可以让它循环遍历列以准备SUM()。
答案 2 :(得分:0)
我尝试使用您提供的样本数据集。
declare @intFlag int
Declare @AnsString nvarchar(2000)
SET @intFlag=1
SET @AnsString=''
While (@intFlag<=200)
Begin
Select @AnsString=@AnsString
+CONVERT(Varchar(20),(SELECT [Element_Name]
FROM TABLE where RowID=@intFlag))
+', '
SET @intFlag=@intFlag+1
if @intFlag=199
break;
END
Print @AnsString
--Select @AnsSTring
答案 3 :(得分:0)
如果您希望将这些数据放在不同的列中,那么您可以使用动态SQL来PIVOT
SQL Server 2005+中的数据。您的代码与此类似:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(element_name)
from yourtable
group by element_name, id
order by id
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'select '+@cols+'
from
(
select Element_name, Value
from yourtable
) p
pivot
(
max(value)
for Element_name in('+@cols+')
) piv'
execute(@query)
见SQL Fiddle with Demo。这给出了结果:
| PARMITHA | ANGGUN | CHANDRA | BAGUSOFTERROR | LARAS | JESSICA | AISYAH | SONYA |
----------------------------------------------------------------------------------
| 100 | 200 | 300 | 400 | 500 | 600 | 700 | 20000 |