Come faccio ad aggiungere questa query nella mia query esistente all'interno di Query Designer?

0

Domanda

Attualmente ho il seguente query scritta entro Query Designer. Ho fatto una domanda ieri e ha funzionato sui propri, ma vorrei integrare nel mio report esistente.

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'

La mia domanda di ieri era che volevo un modo per selezionare solo il primo commento su ogni vendita. Ho una query per la selezione contrassegnata commenti, ma voglio che sia la prima riga e la bandiera commento. Entrambi sarebbero tirando dalla stessa tabella. Questa è la query fornito e lavorato sui propri, ma non riesco a capire come farlo funzionare con la mia query esistente.

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

Grazie mille per il vostro aiuto.

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

Migliore risposta

0

È possibile utilizzare una combinazione di fila di numerazione e di aggregazione ottenere i Flagged% i commenti, e il primo commento.

Si potrebbe desiderare di cambiare il PARTITION BY clausola per soddisfare.

DISTINCT la query esterna è probabilmente spuria, all'interno di query che è sicuramente, come hai GROUP BY comunque. Se si sono sempre più righe, non basta buttare DISTINCT esso, invece di pensare di join e se avete bisogno di aggregazione.

Il secondo LEFT JOIN logicamente diventa un INNER JOIN a causa della WHERE predicato. Forse che il predicato devono essere stati ON invece?

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

In altre lingue

Questa pagina è in altre lingue

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