Ako mám správne pridať tento dotaz do môjho existujúceho dopytu v rámci Query Designer?

0

Otázka

Som v súčasnej dobe majú nižšie dotaz napísané v Query Designer. Som sa spýtal včera a fungovalo to na jeho vlastné, ale by som chcel začleniť ju do môjho existujúceho správa.

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'

Moja otázka včera bolo, že som chcel spôsob, ako vybrať iba prvý komentár vyrobené pre každého predaja. Mám dotaz pre výber príznakom poznámky, ale chcem aj prvý riadok a príznakom komentár. Oni by byť ťahanie z tej istej tabuľke. To bol dotaz a za predpokladu, že pracoval na jeho vlastné, ale nemôžem prísť na to, ako to urobiť pracovať s existujúcimi dotaz.

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

Ďakujem moc za vašu pomoc.

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

Najlepšiu odpoveď

0

Môžete použiť kombináciu riadok-číslovanie a agregácie, aby si obe Flagged% komentáre a prvý komentár.

Možno budete chcieť zmeniť PARTITION BY ustanovenie tak, aby vyhovovali.

DISTINCT na vonkajšej dotazu je pravdepodobne podvrhnuté, na vnútorné dotaz určite je, ako máte GROUP BY každopádne. Ak ste stále viac riadkov, nie len hádzať DISTINCT na to, namiesto toho, že o vašom spojení a či potrebujete agregácie.

Druhý LEFT JOIN logicky stáva INNER JOIN vzhľadom k WHERE predikát. Možno, že predikát by boli v ON namiesto 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 iných jazykoch

Táto stránka je v iných jazykoch

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