Yalnızca bir değer zaten boş olmayan bir değere sahip bir satıra sahip olduğunda boş değerlere sahip satırları filtrelemek

0

Soru

SQL Server Management Studio 17 kullanıyorum.

Aşağıdaki değerleri döndüren bir group by içeren bir select deyimim var. Bu sadece 170k satırdan oluşan bir alt kümedir.

SELECT        child, parent
FROM            (SELECT child, parent
                          FROM table
                          GROUP BY child, parent) AS derivedtbl_1
ORDER BY child
Çocuk Ebeveyn
201 boş
201 991
201 1020
202 boş
203 boş

İlk satırı filtreleyen bir select deyimi bulmak için uğraşıyorum. Bir çocuğun zaten NULL olmayan bir ebeveyni varsa, satırı NULL değeriyle filtrelemesini istiyorum.

Count ifadesine sahipken bunu bir dava ile çözmeye çalıştım. Örneğin, alt sütunda bir kereden fazla bir değer varsa, üst sütunun NULL olduğu satırı filtrelemesini istiyorum, ancak şu ana kadar tüm kodum hata döndürüyor.

Çocuk Ebeveyn
201 991
201 1020
202 boş
203 boş
sql sql-server
2021-11-23 09:48:35
2

En iyi cevabı

2

Burada exısts mantığını kullanabilirsiniz:

SELECT child, parent
FROM yourTable t1
WHERE
    Parent IS NOT NULL OR
    (Parent IS NULL AND
     NOT EXISTS (SELECT 1 FROM yourTable t2
                 WHERE t2.Child = t1.Child AND
                       t2.Parent IS NOT NULL));

screen capture from demo link below

Gösteri

2021-11-23 09:55:57
0

Bunun için bir pencere işlevi kullanabilirsiniz. Kullanmaktan daha hızlı veya daha yavaş olabilir. EXISTS kendi kendine katılma, test etmeniz gerekiyor

SELECT
  child,
  parent
FROM (
    SELECT
      child,
      parent,
      AnyParent = MAX(parent) OVER (PARTITION BY child)
    FROM [table]
    GROUP BY child, parent
) AS derivedtbl_1
WHERE AnyParent IS NOT NULL;
ORDER BY child
2021-11-23 17:28:56

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................