SQL Server PIVOT的语法,除一个col外,所有col都相同
肯定已经有一个很好的答案了,但我看不出来 我有这个:SQL Server PIVOT的语法,除一个col外,所有col都相同,sql,sql-server,pivot,Sql,Sql Server,Pivot,肯定已经有一个很好的答案了,但我看不出来 我有这个: Field1, field2, field3, memoline -------------------------------- 1 1 1 ABC 1 1 1 DEF 2 2 2 UVW 2 2 2 XYZ 我需要把它变成这样: Field1, field2, field3, memoline1
Field1, field2, field3, memoline
--------------------------------
1 1 1 ABC
1 1 1 DEF
2 2 2 UVW
2 2 2 XYZ
我需要把它变成这样:
Field1, field2, field3, memoline1, memoline2
--------------------------------------------
1 1 1 ABC DEF
2 2 2 UVW XYZ
字段1、2和3对于每个唯一的备忘行都是相同的
我怀疑PIVOT可以做到这一点,但我失败了,因为备忘录行是自由格式的文本,可以是任何内容。我不知道它是什么,PIVOT语法似乎想让我知道memoline中的值,以便执行它。如果您知道每行只有两个memoline,那么下面的查询就可以实现这一点:
SELECT
FIELD1,
FIELD2,
FIELD3,
MAX(CASE WHEN [ORDER] = 1 THEN MEMOLINE ELSE NULL END) MEMOLINE1,
MAX(CASE WHEN [ORDER] = 2 THEN MEMOLINE ELSE NULL END) MEMOLINE2
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY FIELD1, FIELD2, FIELD3 ORDER BY MEMOLINE) [ORDER]
FROM TABLE1
) A
GROUP BY
FIELD1,
FIELD2,
FIELD3
这是输出
╔══════════════════════════════════════════╗
║ Field1 field2 field3 memoline1 memoline2 ║
╠══════════════════════════════════════════╣
║ 1 1 1 ABC DEF ║
║ 2 2 2 UVW XYZ ║
╚══════════════════════════════════════════╝
如果一组元组有2个以上的记忆,则没有问题,但是这个查询只考虑MeOLLO中由文本排序的两个第一个。
要使用PIVOT执行此操作,您需要添加一个行号,该行号可用于区分备忘录行记录,如果备忘录行数未知,您可以将其设置为动态,但您只需向IN列表中添加一组,如下所示:;WITH cte AS ( SELECT *, 'Memoline'+CAST(ROW_NUMBER() OVER (PARTITION BY Field1, Field2, Field3 ORDER BY MEMOLINE)AS VARCHAR(3)) As NewMemo
FROM TABLE1
)
SELECT *
FROM cte
PIVOT (MAX(MemoLine) FOR NewMemo IN (Memoline1,Memoline2,Memoline3,Memoline4))Pvt
演示:是否每行只有两行备忘录?