Sql 你们这些家伙,让我看看我是否能更好地描述它! ID Role redn Value 1 Role1 redn1 V1 1 Role1 redn1 V2 1 Role1 redn2 V3 1 Role2
你们这些家伙,让我看看我是否能更好地描述它!Sql 你们这些家伙,让我看看我是否能更好地描述它! ID Role redn Value 1 Role1 redn1 V1 1 Role1 redn1 V2 1 Role1 redn2 V3 1 Role2 ,sql,sql-server,Sql,Sql Server,你们这些家伙,让我看看我是否能更好地描述它! ID Role redn Value 1 Role1 redn1 V1 1 Role1 redn1 V2 1 Role1 redn2 V3 1 Role2 redn1 V1 1 Role2 redn2 V2 ID Role redn1 redn2 1 Role1 V1 V3 1 Role1 V2 V3 1 Role2 V1
ID Role redn Value
1 Role1 redn1 V1
1 Role1 redn1 V2
1 Role1 redn2 V3
1 Role2 redn1 V1
1 Role2 redn2 V2
ID Role redn1 redn2
1 Role1 V1 V3
1 Role1 V2 V3
1 Role2 V1 V2
SELECT ID, Role, [redn1], [redn2], [redn3], ..., [redn8]
FROM
(SELECT ID, Role, redn, Value
FROM [Input]) AS SourceTable
PIVOT
(
MAX([Output])
FOR redn IN ([redn1], [redn2], [redn3], ..., [redn8])
) AS PivotTable;
select ID, Role, s1.value as redn1, s2.value as redn2
from source s1
inner join source s2
on s1.ID=s2.ID and s1.Role=s2.Role and s1.redn != s2.redn
SELECT Id, Role,
SUM(IF(redn = 'redn1', Value, 0)) AS redn1,
SUM(IF(redn = 'redn2', Value, 0)) AS redn2
FROM dataset
GROUP BY Id, Role
/* Source Data */
--DROP TABLE #Temp
SELECT 1 AS ID, 'Role1' AS Role,'redn1' redn, 'V1' [Value]
INTO #Temp
UNION ALL
SELECT 1 AS ID, 'Role1' AS Role,'redn1' redn, 'V2' [Value]
UNION ALL
SELECT 1 AS ID, 'Role1' AS Role,'redn2' redn, 'V3' [Value]
UNION ALL
SELECT 1 AS ID, 'Role2' AS Role,'redn1' redn, 'V1' [Value]
UNION ALL
SELECT 1 AS ID, 'Role2' AS Role,'redn2' redn, 'V2' [Value]
/*Query*/
WITH Source_Dataset
AS
(
Select ID
,Role
,RednNo = CASE WHEN redn = 'redn1' then 1
WHEN redn = 'redn2' then 2
END
,[Value]
FROM #Temp
)
select DISTINCT S1.ID
,S1.Role
,s1.value redn1
,s2.value redn2
from Source_Dataset s1
inner join Source_Dataset s2
on s1.ID=s2.ID and s1.Role=s2.Role and s1.RednNo < s2.RednNo
ORDER by 1,2