Как правильно добавить этот запрос в существующий запрос в конструкторе запросов?

0

Вопрос

В настоящее время у меня есть приведенный ниже запрос, написанный в конструкторе запросов. Вчера я задал вопрос, и он сработал сам по себе, но я хотел бы включить его в свой существующий отчет.

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'

Мой вчерашний вопрос заключался в том, что я хотел найти способ выбрать только первый комментарий, сделанный для каждой продажи. У меня есть запрос для выбора отмеченных комментариев, но мне нужны как первая строка, так и отмеченный комментарий. Они оба будут тянуть из - за одного стола. Это был предоставленный запрос, и он работал сам по себе, но я не могу понять, как заставить его работать с моим существующим запросом.

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

Большое вам спасибо за вашу помощь.

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

Лучший ответ

0

Вы можете использовать комбинацию нумерации строк и агрегирования, чтобы получить как Flagged% комментарии и первый комментарий.

Возможно, вы захотите изменить PARTITION BY пункт подходит.

DISTINCT по внешнему запросу это, вероятно, ложно, по внутреннему запросу это определенно так, как у вас есть GROUP BY в любом случае. Если вы получаете несколько строк, не просто бросайте DISTINCT вместо этого подумайте о своих объединениях и о том, нужна ли вам агрегация.

Второй LEFT JOIN логически становится INNER JOIN из-за WHERE сказуемое. Возможно, этот предикат должен был быть в ON вместо этого?

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

На других языках

Эта страница на других языках

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

Популярное в этой категории

Популярные вопросы в этой категории