SQL使用Union和Group By将行合并为一行
我想就我的问题寻求帮助。我想得到一个结果,如图所示。我喜欢使用SQL使用Union和Group By将行合并为一行,sql,sql-server,union,Sql,Sql Server,Union,我想就我的问题寻求帮助。我想得到一个结果,如图所示。我喜欢使用groupby和UNION组合,但无法得到我想要的结果 以下是我的示例查询: SELECT * FROM (SELECT '' as AccomplishmentDate, ETRDate, ProjectName, EquipmentName, 0 as AccomplishmentActualHour, ETRActualHour FROM Tabl
groupby
和UNION
组合,但无法得到我想要的结果
以下是我的示例查询:
SELECT *
FROM
(SELECT
'' as AccomplishmentDate, ETRDate, ProjectName, EquipmentName,
0 as AccomplishmentActualHour, ETRActualHour
FROM
Table1
UNION
SELECT
AccomplishmentDate, '' AS ETRDate, ProjectName, EquipmentName,
AccomplishmentActualHour, 0 AS ETRActualHour
FROM
Table1) AS Transaction
提前感谢:)如果我理解正确,您可以使用
MAX
函数和groupby
来创建它
SELECT
MAX(AccomplishmentDate),
MAX(ETRDate),
ProjectName,
EquipmentName,
MAX(AccomplishmentActualHour),
MAX(ETRActualHour)
FROM
(
SELECT NULL as AccomplishmentDate, ETRDate, ProjectName,EquipmentName, 0 as
AccomplishmentActualHour, ETRActualHour
FROM T
UNION
SELECT AccomplishmentDate, NULL as ETRDate, ProjectName,EquipmentName,
AccomplishmentActualHour,0 as ETRActualHour
FROM T
) t
GROUP BY
ProjectName,EquipmentName
sqlfiddle:
从你的图像数据来看,这似乎是可行的
SELECT MAX(AccomplishmentDate),
MAX(ETRDate),
ProjectName,
EquipmentName,
MAX(AccomplishmentActualHour),
MAX(ETRActualHour)
FROM Table1
GROUP BY ProjectName,EquipmentName
编辑
您需要编写子查询以生成一个行\u编号
,然后添加分组依据
和最大值
;WITH CTE AS(
SELECT NULL as AccomplishmentDate, ETRDate, ProjectName,EquipmentName, 0 as
AccomplishmentActualHour, ETRActualHour,1 grp
FROM T
UNION
SELECT AccomplishmentDate, NULL as ETRDate, ProjectName,EquipmentName,
AccomplishmentActualHour,0 as ETRActualHour,2
FROM T
),grpCTE AS(
SELECT *,ROW_NUMBER() OVER(PARTITION BY grp ORDER BY grp) rn
FROM CTE
)
SELECT MAX(AccomplishmentDate),
MAX(ETRDate),
ProjectName,
EquipmentName,
MAX(AccomplishmentActualHour),
MAX(ETRActualHour)
FROM grpCTE
group by
ProjectName,
EquipmentName,
rn
sqlfiddle:
顺便说一句,如果你有新问题,你可以创建一个新的线程:)Wow..它很有效..非常感谢你,我的朋友..它真的很有帮助。没问题,如果有帮助,你可以标记这个答案you@a16tintin,如果有人给了你一个解决你问题的答案,那么就接受这个答案(并向上投票。)@jarlh Oh okey.Thank:)@D-Shih新问题出现了。我不打算使用MAX,因为我需要显示唯一的行。例如,如果完成日期不同,我需要为此添加新行。无法获取最大完成日期。:(.我该怎么办?您使用的是哪种?“SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加一个“
postgresql
,oracle
,SQL server
,db2
。。。