SQL ВЫБЕРИТЕ ID, ГДЕ строки с одинаковым идентификатором имеют разные значения - PullRequest
1 голос
/ 30 января 2020

Мне нужна помощь в создании оператора SQL в строках.

    SELECT SZ.Stammindex AS ID, S.sEbene1, S.sEbene2, S.sEbene3
    FROM SuchbaumZuordnung SZ 
    LEFT JOIN Suchbaum S 
    ON SZ.gSuchbaumID = S.gID
    WHERE (S.sEbene1 IN ('Test1') 
    AND (S.sEbene2 IN ('Test2') OR S.sEbene2 IS NULL) 
    AND S.sEbene3 IS NULL)

This is what I got so far

Как вы можете видеть на скриншоте, я выбрал ID = 10004 и ID = 10005. Но на самом деле я только хочу, чтобы ID = 10005 появился. Я пытаюсь отфильтровать все строки, как уже упоминалось.

Моя цель - получить все идентификаторы, где все условия связаны с «И», что-то вроде этого:

WHERE (sEbene1 IN ('Test1') 
       AND (sEbene2 IN ('Test2') *AND* sEbene2 IS NULL) 
       AND sEbene3 IS NULL)

Но это ничего не даст.

Изменить

Table Suchbaum structure

Table SuchbaumZuorndung structure

Я надеюсь, что вы, ребята, можете мне помочь .

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Учитывая, что у вас есть только 3 столбца, которые вы хотите проверить разные строки, кажется, что это будет легко обслуживаться с помощью CTE и Windowed COUNT:

WITH CTE AS(
    SELECT SZ.Stammindex AS ID,
           S.sEbene1, --Guessed the table alias
           S.sEbene2, --Guessed the table alias
           S.sEbene3, --Guessed the table alias
           COUNT(DISTINCT CONCAT(ISNULL(S.S.sEbene1,'-'),ISNULL(S.sEbene2,'-'),ISNULL(S.sEbene3,'-'))) OVER (PARTITION BY SZ.Stammindex) AS DistinctRows
    FROM SuchbaumZuordnung SZ 
         LEFT JOIN Suchbaum S ON SZ.gSuchbaumID = S.gID) --This was missing the ON in your sample
SELECT C.Stammindex,
       C.sEbene1,
       C.sEbene2,
       C.sEbene3
FROM CTE C
WHERE C.DistinctRows > 1;

Если это просто, где идентификатор имеет более 1 строки (которые могут быть идентичны), тогда вы можете просто использовать COUNT:

WITH CTE AS(
    SELECT SZ.Stammindex AS ID,
           S.sEbene1, --Guessed the table alias
           S.sEbene2, --Guessed the table alias
           S.sEbene3, --Guessed the table alias
           COUNT(*) OVER (PARTITION BY SZ.Stammindex) AS [Rows]
    FROM SuchbaumZuordnung SZ 
         LEFT JOIN Suchbaum S ON SZ.gSuchbaumID = S.gID)
SELECT C.Stammindex,
       C.sEbene1,
       C.sEbene2,
       C.sEbene3
FROM CTE C
WHERE C.[Rows] > 1;
0 голосов
/ 30 января 2020

Я подозреваю, что вы хотите:

SELECT SZ.Stammindex AS ID
FROM SuchbaumZuordnung SZ 
WHERE EXISTS (SELECT 1
              FROM Suchbaum S
              WHERE SZ.gSuchbaumID = S.gID AND
                    S.sEbene1 IN ('Test1') AND
                    sEbene2 IN ('Test2')
             ) AND
       EXISTS (SELECT 1
              FROM Suchbaum S
              WHERE SZ.gSuchbaumID = S.gID AND
                    S.sEbene2 IS NULL AND
                    S.sEbene3 IS NULL
             );

Это ищет две разные строки в Suchbaum, каждая из которых соответствует одному из условий.

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