如果你有一个位置字段,你没有告诉我们可以区分每列中的含义
SELECT
custcode,
MAX(CASE WHEN location = 1 THEN address END) AS location1,
MAX(CASE WHEN location = 2 THEN address END) AS location2,
MAX(CASE WHEN location = 3 THEN address END) AS location3
FROM X
GROUP BY custcode
如果你依靠行排序SQL Server特定的答案。
这假定您有一个ID字段,可以从中计算“第一个”行的顺序。
with X as
(
SELECT 1 AS ID, 'cust1' AS custcode, 'capitol, cebu city' AS address
UNION ALL
SELECT 2 AS ID, 'cust1' AS custcode, 'gen. maxilom, cebu city' AS address
UNION ALL
SELECT 3 AS ID, 'cust1' AS custcode, 'guadalupe, cebu city' AS address
UNION ALL
SELECT 4 AS ID, 'cust2' AS custcode, 'paknaan, mandaue city' AS address
UNION ALL
SELECT 5 AS ID, 'cust2' AS custcode, 'basak, mandaue city' AS address
UNION ALL
SELECT 6 AS ID, 'cust2' AS custcode, 'lapu-lapu city'
)
, Y AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY custcode ORDER BY ID) AS RN,
custcode,
address
FROM X
)
SELECT custcode, [1] AS location1 , [2] AS location2,[3] AS location3 FROM Y
PIVOT
(
Max(address)
FOR RN IN ([1], [2],[3])
) AS PivotTable;
你如何区分location1和location2等等你有一个值为1,2,3的列吗?你使用的是什么RDBMS? – 2010-07-19 10:18:56
我正在使用mssql先生。不,先生,我没有这些列,但我有一个ID字段。我想尝试交叉表,但我不知道如何获取位置列。 – pilots 2010-07-19 23:43:29
mssql - Microsoft SQL Server?如果是的话,只要你在2005年或以后,我的第二个版本就可以为你工作。 – 2010-07-20 19:26:50