我将使用两种不同的类别代码对特定Id进行一些关节计算。
所以我将以下两行作为输入,
我期待以下输出为,
我正在努力做一些自我加入,但我没有幸运地获得所需的输出。
你能帮助我吗?
注意:特定ID只会有两行(两种类别会来[A或C])。
答案 0 :(得分:2)
方法1:
试试这个
SELECT *
FROM Table1
Pivot (MAX(value) for Category in ([A],[C])) as Value
<强> Fiddle Demo 强>
<强>输出:强>
+-------------+-------+-------+
| ID | A |C |
+-------------+-------+-------+
| WD559606479 | 0.748 |2.088 |
+-------------+-------+-------+
方法2: 动态数据透视
如果输入中还有一列,则
试试这个
DECLARE @cols AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category)
FROM table1 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query ='SELECT id, ' + @cols + ' from
(
SELECT id
, category
, value
FROM table1
) x
Pivot
(
Max(value)
For category In (' + @cols + ')
) P'
Execute(@query)
<强> Fiddle Demo 强>
<强>输出:强>
+-------------+-------+-------+
| ID | A |C |
+-------------+-------+-------+
| WD559606479 | 0.748 |2.088 |
+-------------+-------+-------+
答案 1 :(得分:2)
特定ID只会有两行(两种类别将会出现 来[A或C])。
然后这个查询就足够了:
SELECT ID,
ValueA = SUM(CASE WHEN Category = 'A' THEN Value END),
ValueC = SUM(CASE WHEN Category = 'C' THEN Value END)
FROM dbo.TableName
GROUP BY ID