Jak mám správně přidat tento dotaz do existujícího dotazu v návrháři Dotazu?

0

Otázka

V současné době mám níže dotaz napsal do Návrháře Dotazu. Ptal jsem se včera a fungovalo to na jeho vlastní, ale rád bych, aby ji začlenit do stávající zprávy.

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'

Moje otázka včera byl, že jsem chtěl vybrat pouze první komentář pro každý prodej. Mám dotaz pro výběr označené komentáře, ale chci obě první řadě a označený komentář. Obě by být táhne od stejného stolu. Toto byl dotaz a za předpokladu, že to fungovalo na jeho vlastní, ale nemůžu přijít na to, jak, aby to fungovalo s mým stávajícím dotazu.

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

Děkuji moc za vaši pomoc.

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

Nejlepší odpověď

0

Můžete použít kombinaci řadě-číslování a agregace dostat oba Flagged% komentáře a první komentář.

Možná budete chtít změnit PARTITION BY ustanovení tak, aby vyhovovaly.

DISTINCT na vnějším dotazu je pravděpodobně podvržený, na vnitřní dotaz to určitě je, jak jste GROUP BY každopádně. Pokud jste získali více řádků, ne jen házet DISTINCT na to, místo toho přemýšlet o své připojí a zda je potřeba agregace.

Druhý LEFT JOIN logicky stává INNER JOIN vzhledem k WHERE predikát. Možná, že predikát by měl být v ON místo toho?

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

V jiných jazycích

Tato stránka je v jiných jazycích

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