如何仅在第一列返回distinct而仍然返回另一列4

时间:2015-05-26 16:57:10

标签: sql sql-server-2008

这是我想要开始工作的SQL查询...

SELECT distinct
r.Heat
,c.ctemp
,s.ShiftIdent
,r.ChargeSeq
,s.rollLocSeq
FROM (NYS1ShiftCut s inner join NYS1CharpyOrders c on c.CharpyOrderID = s.CharpyID)
join NYS1Reheat r on r.LocSeq = s.RollLocSeq 
where c.CTemp < +40 
order by s.rollLocSeq desc

我只需要将“r.heat”作为不同的返回,其余列填充其中包含的任何内容。 c.ctemp和s.shiftident可以很容易地包含重复信息,r.chargeseq和s.rollLocseq将是唯一的返回。

我尝试了几个子查询无济于事。任何帮助将不胜感激。 以下是重新调整的栏目......

439799  -04 05/22/15154D    126 542949330

439799  -04 05/22/15154D    124 542949310

439799  -04 05/22/15154D    123 542949300

439799  -04 05/22/15154D    122 542949290

439799  -04 05/22/15154D    121 542949280

439797  -04 05/22/15154D    117 542949240

439797  -04 05/22/15154D    116 542949230

2 个答案:

答案 0 :(得分:1)

SQL Server中没有构造为您提供非分组列的任意值。您需要按这些列进行分组或使用一些聚合函数的痛处。

如果您在评论中指出其他列的值“无关紧要”,那么您可以使用MIN为每列选择一个值:

SELECT distinct
r.Heat
,MIN(c.ctemp)
,MIN(s.ShiftIdent)
,MIN(r.ChargeSeq)
,MIN(s.rollLocSeq)
FROM (NYS1ShiftCut s inner join NYS1CharpyOrders c on c.CharpyOrderID = s.CharpyID)
join NYS1Reheat r on r.LocSeq = s.RollLocSeq 
where c.CTemp < +40 
GROUP BY r.Heat
order by s.rollLocSeq desc

MIN的选择是任意的,也可以是MAXAVG(警告AVG可能会为您提供不在源中的值数据如果不完全相等。

答案 1 :(得分:0)

@cpe_event