Bu sorguyu Sorgu Tasarımcısı'ndaki mevcut sorguma nasıl düzgün bir şekilde ekleyebilirim?

0

Soru

Şu anda Query Designer içinde yazılmış aşağıdaki sorguya sahibim. Dün bir soru sordum ve kendi başına çalıştı, ancak mevcut raporuma dahil etmek istiyorum.

SELECT Distinct
       i.ProductNumber
  ,i.ProductType
  ,i.ProductPurchaseDate
  ,ih.SalesPersonComputerID
  ,ih.SalesPerson
  ,ic2.FlaggedComments

FROM [Products] i
        
LEFT OUTER JOIN 
    (SELECT Distinct
        MIN(c2.Comments) AS FlaggedComments
        ,c2.SalesKey 
        FROM [SalesComment] AS c2
        WHERE(c2.Comments like 'Flagged*%')
        GROUP BY c2.SalesKey) ic2 
    ON ic2.SalesKey = i.SalesKey

LEFT JOIN [SalesHistory] AS ih
    ON ih.SalesKey = i.SalesKey

WHERE
  i.SaleDate  between @StartDate and @StopDate
AND ih.Status = 'SOLD'

Dün sorum şu ki, her satış için yalnızca ilk yorumu seçmenin bir yolunu istedim. İşaretli yorumları seçmek için bir sorgum var ancak hem ilk satırı hem de işaretli yorumu istiyorum. İkisi de aynı masadan çekiliyordu. Sağlanan sorgu buydu ve kendi başına çalıştı, ancak mevcut sorgumla nasıl çalışacağını anlayamıyorum.

SELECT a.DateTimeCommented, a.ProductNumber, a.Comments, a.SalesKey 
FROM (
    SELECT 
            DateTimeCommented, ProductNumber, Comments, SalesKey,
            ROW_NUMBER() OVER(PARTITION BY ProductNumber ORDER BY DateTimeCommented) as RowN
    FROM [SalesComment]
    ) a 
WHERE a.RowN = 1

Yardımınız için çok teşekkür ederim.

query-designer sql-server
2021-11-23 17:24:55
1

En iyi cevabı

0

Her ikisini de elde etmek için satır numaralandırma ve toplama kombinasyonunu kullanabilirsiniz. Flagged% yorumlar ve ilk yorum.

Değiştirmek isteyebilirsiniz PARTITION BY uygun madde.

DISTINCT dış sorguda muhtemelen sahte, iç sorguda kesinlikle olduğu gibi GROUP BY Her neyse. Birden çok satır alıyorsanız, sadece atmayın DISTINCT bunun yerine, birleşimlerinizi ve toplanmaya ihtiyacınız olup olmadığını düşünün.

İkinci LEFT JOIN mantıksal olarak bir INNER JOIN nedeniyle için WHERE yüklem. Belki de bu yüklemin içinde olması gerekirdi ON onun yerine mi?

SELECT
   i.ProductNumber
  ,i.ProductType
  ,i.ProductPurchaseDate
  ,ih.SalesPersonComputerID
  ,ih.SalesPerson
  ,ic2.FlaggedComments
  ,ic2.FirstComments

FROM [Products] i
        
LEFT OUTER JOIN 
    (SELECT
        MIN(CASE WHEN c2.RowN = 1 THEN c2.Comments) AS FirstComments
        ,c2.SalesKey 
        ,MIN(CASE WHEN c2.Comments like 'Flagged*%' THEN c2.Comments) AS FlaggedComments
        FROM (
            SELECT *,
              ROW_NUMBER() OVER (PARTITION BY ProductNumber ORDER BY DateTimeCommented) as RowN
            FROM [SalesComment]
        ) AS c2
        GROUP BY c2.SalesKey
    ) ic2 ON ic2.SalesKey = i.SalesKey

JOIN [SalesHistory] AS ih
    ON ih.SalesKey = i.SalesKey

WHERE
  i.SaleDate between @StartDate and @StopDate
AND ih.Status = 'SOLD'
2021-11-23 23:52:06

Diğer dillerde

Bu sayfa diğer dillerde

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