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

演示:

是否每行只有两行备忘录?