Cum pot adăuga în mod corespunzător această interogare în interogare existente în Query Designer?

0

Problema

În prezent am mai jos de interogare scris în Query Designer. Am pus o intrebare ieri si a mers pe cont propriu, dar aș dori să-l includă în raportul existent.

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'

Intrebarea mea de ieri a fost că am vrut o modalitate de a selecta doar primul comentariu făcut pentru fiecare vânzare. Am o interogare de selectare a marcat comentarii dar vreau atât primul rând și a marcat un comentariu. Amandoi s-ar fi trăgând de la aceeași masă. Aceasta a fost condiția de interogare și a lucrat pe cont propriu, dar nu pot da seama cum să facem să funcționeze cu existente de interogare.

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

Vă mulțumesc foarte mult pentru ajutor.

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

Cel mai bun răspuns

0

Puteți utiliza o combinație de rând-de numerotare și de agregare a obține atât Flagged% comentarii, și primul comentariu.

Poate doriți pentru a schimba PARTITION BY clauză pentru a se potrivi.

DISTINCT pe exterior interogare este, probabil, false, pe interior interogare acesta este cu siguranta, ca ai GROUP BY oricum. Dacă sunteți obtinerea mai multe rânduri, nu doar arunca DISTINCT la ea, în loc să gândești ți se alătură și dacă aveți nevoie de agregare.

Cel de-al doilea LEFT JOIN în mod logic, devine o INNER JOIN datorită WHERE predicatul. Poate că predicatul ar fi fost în ON în schimb?

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

În alte limbi

Această pagină este în alte limbi

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