регистр на основе 3 столбцов в 1 таблице - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь создать поле в своем sql-коде, где, если значение MRN в строках 1 и 2 одинаково и соответствующий TF_GROUP идентичен, но поле PathId для обеих строк различно, тогда новое поле должно иметь 'Да, в противном случае по умолчанию должно быть «Нет».Я могу создать это поле в Excel, но я изо всех сил пытаюсь создать нечто подобное в SQL.Я включил написанное мной выражение excel, которое в идеале хотелось бы воспроизвести в приведенном ниже выражении sql.

=IF(AND(B2=B3,D2=D3,A2<>A3),"Yes","No")

Я в основном хочу использовать синтаксис sql, аналогичный приведенной выше функции excel, который я мог бы использовать в sqlсервер для создания столбца, который я желаю.

Ниже приведен код SQL, который я написал с 3 полями (PathID, MRN, TF_GROUP).

 select DISTINCT 
[Pathway ID] PathID,
MRN,
DENSE_RANK() OVER(PARTITION BY mrn ORDER BY [Pathway ID]) RK,
[Treatment Function Group] TF_GROUP,
'' [Flag]

from [HRS_RTT].[dbo].[tbl_PMM_IncompletePTL_CG_Snapshot] 
where convert(date,censusdate) between '03-jun-19' and '09-jun-19'
AND MRN IS NOT NULL
AND [Treatment Function Group] IS NOT NULL

order by
MRN,
[Pathway ID]

Вот частьвывод (см. ссылку ниже) после запуска встроенного кода SQL.Столбец под названием «Флаг» - это то, что я изо всех сил пытаюсь воспроизвести в моем SQL-коде выше.На данный момент мне нужно скопировать вывод в Excel, а затем заполнить столбец «Флаг», используя функцию, которую я ранее включил в мой предыдущий пост.

enter image description here

Ответы [ 4 ]

4 голосов
/ 02 июля 2019
SELECT
    CASE
        WHEN B2 = B3 AND D2 = D3 AND A2 <> A3 THEN 'Y'
        ELSE 'N'
    END AS SomeColumnName
FROM SomeTable

Источник: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql?view=sql-server-2017

1 голос
/ 02 июля 2019

Я пытаюсь создать поле

Вы можете добавить вычисляемый столбец как

ALTER TABLE YourTableName
ADD NewColumnName AS CASE WHEN B2=B3 AND D2=D3 AND A2<>A3 THEN 'Y' ELSE 'N' END;
1 голос
/ 02 июля 2019

Выражение case будет работать так же, как в ответе, который дал Хан. Вы также можете использовать IIF, если у вас есть только простое условие IF / ELSE.

SELECT IIF(B2 = B3 AND D2 = D3 AND A2 <> A3, 'Y', 'N') as SomeColumnName
From SomeTable

Если у вас есть несколько условий для тестирования (ЕСЛИ ТО / ЕСЛИ ТО / ЕСЛИ ТО / ЕСЛИ), то СЛУЧАЙ гораздо более практичен, чем использование вложенных ИИФ

0 голосов
/ 06 июля 2019

То, к чему не обращался ни один из других ответов: этот вопрос касается сравнения по строкам.Вопрос заключается в том, как продублировать эту формулу Excel в SQL:

=IF(AND(B2=B3,D2=D3,A2<>A3),"Yes","No")

Обратите внимание, например, что B2 относится к столбцу B в строке 2, а B3 относится к столбцу B в строке 3 .

Вот решение вашей проблемы, как описано.Он использует функцию T-SQL LEAD для сравнения строк.Обратите внимание, что я не включил критерии DISTINCT в ваш исходный запрос, так как неясно, что вы пытаетесь достичь с помощью этого.

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

select
    PathID,
    MRN,
    TF_Group,
    case
        when MRN = Next_MRN and TF_Group = Next_TF_Group and PathID <> Next_PathID then 'Yes'
        else 'No'
    end as Flag
from (
    select
        [Pathway Id] as PathID,
        MRN,
        [Treatment Function Group] as TF_Group,

        lead([Pathway Id]) over (order by MRN, [Pathway ID]) as Next_PathID,
        lead(MRN) over (order by MRN, [Pathway ID]) as Next_MRN,
        lead([Treatment Function Group])  over (order by MRN, [Pathway ID]) as Next_TF_Group
    from tbl_PMM_IncompletePTL_CG_Snapshot
) x
order by MRN, PathID

Обратите внимание, что этот ответ по сути дублирует тот, который я разместил навопрос, который был отмечен как дубликат.Я перенес его сюда, чтобы он не потерялся, и чтобы у любого, кто найдет этот вопрос, был такой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...