SQL列到行-用于视图
我有一个观点,这个观点是正确的SQL列到行-用于视图,sql,sql-server,Sql,Sql Server,我有一个观点,这个观点是正确的 ID INQCLASS INQDETAIL Period BAL 1233 GROSS water 12-3-2017 233.32 1233 GROSS ENergy 12-3-2017 122.00 ID,INQCLASS,周期相同。除了INQDETAIL和BAL之外 我想把它合并成一行,显示水和能量平衡 任何建议都会有帮助。多谢各位 SELECT ID,
ID INQCLASS INQDETAIL Period BAL
1233 GROSS water 12-3-2017 233.32
1233 GROSS ENergy 12-3-2017 122.00
ID,INQCLASS,周期相同。除了INQDETAIL和BAL之外
我想把它合并成一行,显示水和能量平衡
任何建议都会有帮助。多谢各位
SELECT ID,
INQCLASS,
Period,
MAX(CASE WHEN INQDETAIL = 'water' then BAL else 0 end) as WaterBal,
MAX(CASE WHEN INQDETAIL = 'ENergy' then BAL else 0 end) as ENergyBal
FROM View_Name
GROUP BY ID, INQLASS, Period
case语句仅用于在满足条件时显示BAL。因此,单独使用case,每个项目仍然会返回两行,但其中一行有Waterbal值,没有energybal值,另一行则相反
执行GROUP BY时,每个字段都必须位于GROUP BY列表中(在本例中为ID、INQCLASS、Period),或者具有聚合函数,如SUM、MAX、COUNT等(在本例中,Waterbal和energyBal具有聚合函数)
在本例中,GROUP BY将公共ID INQLASS句点折叠为单行,然后获取Waterbal和energyBal的最大(MAX)值。因为一个始终为0,所以它只提供另一个。尝试以下方法:
SELECT INQDETAIL
, PERIOD
, SUM(BAL) AS energy_Bal
FROM your_view
WHERE INQDETAIL LIKE 'water'
GROUP BY INQDETAIL
, PERIOD;
一个简单的透视表应该可以做到这一点。只要您提前知道Inqdetail值:
select ID,
INQCLASS,
[Period],
[Water] AS [Water Bal],
[Energy] as [Energy Bal]
from
(
select [ID],
[INQCLASS],
[INQDETAIL],
[Period],
[BAL]
from #util
) As Utilities
PIVOT
(
SUM([BAL])
FOR [inqdetail] IN ([Water],[Energy])
) AS Pvttbl
试试这个:
SELECT *
FROM
(SELECT * FROM #temp) AS P
PIVOT
(
max(bal) FOR INQDETAIL IN ([water], [ENergy])
) AS pv1
提示:
GROUP BY
。我使用了GROUP BY,但获取错误我不知道如何使用类似这样的数据透视获取错误。它不包含在聚合函数中,或者GROUP BY子句在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。谢谢,先生。太有用了。这是第一个完美的答案,但最好有一些描述。谢谢你的帮助。它给我相同的输出即使您的代码解决了OP问题,建议您在代码段中添加一些描述性文本。