¿Cómo puedo añadir correctamente esta consulta en mi consulta existente dentro del Diseñador de Consultas?

0

Pregunta

Actualmente tengo la siguiente consulta por escrito dentro del Diseñador de Consultas. Le pregunté a una pregunta de ayer y se trabajó en su propio, pero me gustaría incorporar en mi informe existente.

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'

Mi pregunta de ayer era que quería una manera de seleccionar solamente el primer comentario de cada venta. Tengo una consulta para seleccionar el marcado comentarios, pero quiero tanto a la primera fila y el marcado comentario. Ellos estarían tirando de la misma tabla. Esta fue la consulta y trabajó en su propio, pero no puedo averiguar cómo hacer que funcione con mi consulta existente.

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

Muchas gracias por su ayuda.

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

Mejor respuesta

0

Puede utilizar una combinación de fila de numeración y de agregación para obtener la Flagged% los comentarios, y el primer comentario.

Puede que desee cambiar el PARTITION BY cláusula para adaptarse.

DISTINCT en la consulta externa es probablemente falsos, en la consulta interna que es, en definitiva, como ha GROUP BY de todos modos. Si usted está recibiendo varias filas, no se acaba de lanzar DISTINCT en ella, en lugar de pensar acerca de sus combinaciones y de si usted necesita de agregación.

El segundo LEFT JOIN lógicamente se convierte en un INNER JOIN debido a la WHERE predicado. Tal vez ese predicado debería haber sido en el ON en su lugar?

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

En otros idiomas

Esta página está en otros idiomas

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