Группировка 2 строк в 1

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Возможно, это просто пятничная вещь, но я не могу понять, как отобразить эти записи в виде одной строки, мои данные выглядят так

 PTaskID     Part Requisition    Service Requisition
394512            Yes                   No
394512            No                   Yes
 

То, что я хочу, это 1 строка с PTaskID но со следующим, если есть больше строк, как в примере, и в одной из них есть Yes, Part Requisition тогда общее значение строки для Part Requisition равно Yes, и к нему должна применяться та же логика 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')
 

Комментарии:

1. Рассматривали ли вы возможность замены yes и no на 1 и 0? Таким образом, вы можете выполнить MAX() инструкцию. Вы всегда можете использовать a CASE , чтобы перевести их обратно в yes или no после.

Ответ №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. Привет, Азар, это сработало, мне просто нужно было заменить второй оператор case «Заявка на деталь» на «Заявка на обслуживание», и все работало хорошо с несколькими комбинациями …. спасибо за помощь

Ответ №2:

Учитывая, что «Да» следует после «Нет» (* в большинстве сопоставлений), вы могли GROUP бы, а затем выполнить Max , а именно

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

SQLFiddle здесь

Комментарии:

1. Привет, Стюарт, я никогда не думал об использовании MAX таким образом, приятно каждый день узнавать что-то новое!

Ответ №3:

Это работает лучше с любой сортировкой, а также идеально

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

from [Load]
group by ptaskid