2016-06-09 61 views
0

联合,我莫名其妙地加入了一些表并得到了一些列出来,所以当我运行SELECT SSN, Name, Year2010/Season1, Year2010/Season2, Year2010/Season3, Year2010/Season4 FROM (SELECT ......) AS WORKERS我得到如下表showen:SQL服务器 - 如何柱与同一

SSN Name Year2010/Season1 Year2010/Season2 Year2010/Season3 Year2010/Season4 
112 John   5.4 
234 Tom       4.2 
543 Ben               9.3 
234 Tom           3.2 

该表显示,工人以及他们每年和每个时期的工作时间。不过,我正在尝试合并这些重复值(同一人),并根据年份和季节将所有小时移至同一行。像这样的东西(其中汤姆移动):

SSN Name Year2010/Season1 Year2010/Season2 Year2010/Season3 Year2010/Season4 
112 John   5.4         
234 Tom       4.2    3.2 
543 Ben               9.3 

我一直在尝试了几个小时,但真的不觉得这取决于select语句我做得到这个表结合起来的好办法。任何建议?

回答

1

好像你需要使用SUM

SELECT SSN, 
     Name, 
     SUM([Year2010/Season1]) [Year2010/Season1], 
     SUM([Year2010/Season2]) [Year2010/Season2], 
     SUM([Year2010/Season3]) [Year2010/Season3], 
     SUM([Year2010/Season4]) [Year2010/Season4] 
FROM dbo.YourTable 
GROUP BY SSN, 
     Name; 
+0

感谢您的回复。我忘了提及时间的值设置为VARCHAR。然而,我使用这种方法,并将'SUM'改为'MAX',它似乎工作。 –

+0

有什么方法可以通过SSN订购这些值? –

+0

是的,只要做'GROUP BY SSN,Name ORDER BY SSN';' – Lamak

2

你要聚集。您可以通过调整您的查询来更简单地做到这一点,但您也可以这样做:

with q as (<your query here>) 
select ssn, name, 
     max([Year2010/Season1]) as [Year2010/Season1], 
     max([Year2010/Season2]) as [Year2010/Season2], 
     max([Year2010/Season3]) as [Year2010/Season3], 
     max([Year2010/Season4]) as [Year2010/Season4] 
from q 
group by ssn, name; 
+0

如果在同一时间段内有值的员工有多个行会发生什么? – dfundako