组合行的SQL查询
我有一个查询,它当前打印出我需要的内容,但不合并我需要的行。例如,我需要将具有仪表名称的前两行组合在一起,以此类推,以获得其余仪表名称 这就是我目前拥有的:组合行的SQL查询,sql,Sql,我有一个查询,它当前打印出我需要的内容,但不合并我需要的行。例如,我需要将具有仪表名称的前两行组合在一起,以此类推,以获得其余仪表名称 这就是我目前拥有的: SELECT --Displays Client Number CASE WHEN v.MID IS NULL THEN '' ELSE v.ClientNumber END AS 'Client Number', --Displays MID Number
SELECT
--Displays Client Number
CASE
WHEN v.MID IS NULL THEN ''
ELSE v.ClientNumber
END AS 'Client Number',
--Displays MID Number
CASE
WHEN v.MID IS NULL THEN ''
ELSE v.MID
END AS MID,
--Displays Meter Name
CASE
WHEN v.MID IS NULL THEN ''
ELSE v.MeterName
END AS 'Meter Name',
/*
CASE
WHEN v.MID IS NULL THEN 0
ELSE SUM(v.MCF)
END AS MCF,
*/
--Displays January's MCF
CASE
WHEN v.AccountPeriod = '2018-01-01' THEN SUM(v.MCF)
ELSE 0
END AS January,
--Displays Febuary's MCF
CASE
WHEN v.AccountPeriod = '2018-02-01' THEN SUM(v.MCF)
ELSE 0
END AS Febuary,
CASE
WHEN v.MID IS NULL THEN 0
ELSE SUM(v.mcf)
END AS 'Meter Total'
FROM Volumes v
LEFT JOIN CurrentMeters cm
ON v.MID = cm.MID
WHERE cm.ClientNumber = 107500
GROUP BY v.MID, v.AccountPeriod, v.ClientNumber, v
有没有人对我应该做什么或如何做有什么建议?我想你只需要条件聚合:
SELECT (CASE WHEN v.MID IS NULL THEN '' ELSE v.ClientNumber END) AS Client_Number,
COALESCE(WHEN v.MID, '') as MID,
(CASE WHEN v.MID IS NULL THEN '' ELSE v.MeterName END) AS Meter_Name,
SUM((CASE WHEN v.MID IS NULL THEN 0 v.MCF END) AS MCF,
SUM(CASE WHEN v.AccountPeriod = '2018-01-01' THEN v.MCF ELSE 0 END) AS January,
SUM(CASE WHEN v.AccountPeriod = '2018-02-01' THEN v.MCF ELSE 0 END) AS January,
SUM(CASE WHEN v.MID IS NULL THEN 0 ELSE v.mcf END) AS Meter_Total
FROM Volumes v JOIN
CurrentMeters cm
ON v.MID = cm.MID
WHERE cm.ClientNumber = 107500
GROUP BY (CASE WHEN v.MID IS NULL THEN '' ELSE v.ClientNumber END),
COALESCE(WHEN v.MID, ''),
(CASE WHEN v.MID IS NULL THEN '' ELSE v.MeterName END);
注:
- 您的
子句将外部联接转换为内部联接,因此没有理由表示外部联接WHERE
键指定结果集中定义行的内容。数据中唯一值的每个组合正好位于一行中。因此,您不希望groupby
位于AccountPeriod
分组依据中
- 大概,您希望定义一行的每个表达式都有一行,因此这些表达式位于
中group by
- 对于条件聚合,
表达式是聚合函数的参数,例如CASE
SUM()