将2行分组为1

时间:2014-06-20 08:28:03

标签: sql sql-server tsql

这可能只是一个星期五的事情,但我不知道如何将这些记录显示为一行,我的数据看起来像这样

PTaskID     Part Requisition    Service Requisition
394512            Yes                   No
394512            No                   Yes

我想要的是带有PTaskID的1行,但是如果示例中有更多行,并且其中一行在Part Requisition中有“是”,那么整个行值为Part Requisition为是,同样的逻辑应适用于Service Requisition

任何帮助都会很棒PJD

CREATE TABLE [dbo].[Load](
[PTaskID] [int] NOT NULL,
[Part Requisition] [varchar](3) NOT NULL,
[Service Requisition] [varchar](3) NULL
) ON [PRIMARY]


INSERT INTO Load (PTaskID, [Part Requisition], [Service Requisition])
VALUES
(394512,    'Yes',  'No'),
(394512,    'No',   'Yes')

3 个答案:

答案 0 :(得分:1)

试试这个

 Select Ptaskid, 
        case when sum(case when [Part Requisition] = 'Yes' then 1 else 0 end)> 0 then  'Yes' else 'No' end 'Part Requisition',
        case when sum(case when [Part Requisition] = 'Yes' then 1 else 0 end)> 0 then 'Yes' else 'No' end 'Service Requisition'
from [Load] 
group by ptaskid

答案 1 :(得分:0)

鉴于“是”在“否”之后(*在大多数排序规则中),您可以GROUP然后执行Max,即

SELECT PTaskID, MAX([Part Requisition]) as [MaxPartRequisition], 
                MAX([Service Requisition]) as  [MaxServiceRequisition]
FROM [Load]
GROUP BY PTaskID;

SqlFiddle here

答案 2 :(得分:0)

这适用于任何整理和完美

Select Ptaskid, 
        convert(varchar,max(CONVERT(varbinary, [Part Requisition]))),
        convert(varchar,max(CONVERT(varbinary, [Service Requisition])))

from [Load]
group by ptaskid