Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL使用Union和Group By将行合并为一行_Sql_Sql Server_Union - Fatal编程技术网

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
。。。