如何在没有透视的情况下创建像 CSV 这样的查询
本文关键字:CSV 查询 创建 情况下 透视 | 更新日期: 2023-09-27 17:57:15
我想从表创建csv时遇到麻烦..
这是我的表格示例...
ID HEADER_row Value_row
1 A 100
2 B 200
3 C 300
4 D 400
5 E 500
6 A 600
7 B 700
8 C 800
9 D 900
10 E 1000
这是我想要创建的CSV数据模型,看看这个伙计们:
A B C D E A B C D E
100 200 300 400 500 600 700 800 900 1000
和
A B C D E
1OO 2OO 3OO 4OO 5OO
600 700 800 900 1000
我已经为我的第一个模型问题尝试了这个......
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,'')
但它给了我这样的结果:
A B C D E A B C D E
100 200 300 400 500 600 700 800 900 1000
现在我想得到这样的另一个结果
A B C D E
1OO 2OO 3OO 4OO 5OO
600 700 800 900 1000
除了使用 Pivot 之外,我应该对我的问题使用哪种查询?
要将这些数据拆分为单独的行,您将在获取Value_row
的第二个查询中包含row_number()
:
通过应用row_number()
,您可以按Header_row
值对数据进行分区,以分配两个单独的数字:
select Value_row,
row_number() over(partition by header_row order by id) rn
from yourtable
请参阅 SQL 摆弄演示。此查询给出的结果是:
| VALUE_ROW | RN |
------------------
| 100 | 1 |
| 600 | 2 |
| 200 | 1 |
| 700 | 2 |
| 300 | 1 |
| 800 | 2 |
| 400 | 1 |
| 900 | 2 |
| 500 | 1 |
| 1000 | 2 |
然后,将其合并到现有查询中,以便代码将是:
SELECT STUFF(
(SELECT ',' + s.HEADER_row
FROM yourtable s
FOR XML PATH('')),1,1,'')
UNION ALL
SELECT DISTINCT
STUFF(
(SELECT ',' + cast(Value_row as varchar(50))
from
(
select Value_row,
row_number() over(partition by header_row order by id) rn
from yourtable
) src
where r.rn = src.rn
FOR XML PATH('')),1,1,'')
FROM
(
select Value_row,
row_number() over(partition by header_row order by id) rn
from yourtable
)r ;
请参阅带有演示的 SQL 小提琴
这给出了结果:
| LIST |
------------------------
| A,B,C,D,E,A,B,C,D,E |
| 100,200,300,400,500 |
| 600,700,800,900,1000 |