Мне нужна помощь в этом.Уникальные значения SQL-запросов на основе двух колоний
На данный момент у меня есть этот запрос:
SELECT Table1.Column1 AS Company
,SUM(DATEDIFF(Day, Table2.Column2, Table1.Column3)) AS DiffDate
FROM Table1
INNER JOIN Table2 ON Table1.Column6 = Table2.Column6
AND Table1.Column5 = Table2.Column5
GROUP BY Company
Результатом этого является ...
Company DiffDate
company1 8
Но это не то, что я хочу, потому что есть ценности, которые являются комбинациями column5 и column6, которые являются одинаковыми. Смотри ниже.
Company | Column6 | Column5 | DiffDate
Company1 | 5782 | 10 | 2
Company1 | 5782 | 10 | 2
Company1 | 5782 | 20 | 2
Company1 | 5782 | 30 | 2
Так что результат я после 6, а не 8.
Я попытался с помощью SELECT DISTINCT
но ничего не делает.
Заранее спасибо.
редактировать 2016-02-09
Я сделал следующий запрос в SSMS.
;WITH cte AS (SELECT DISTINCT bestlevdat, bestradnr, bestnr FROM dbo.bpa)
SELECT dbo.bp.ftgnr AS Företagsnr,SUM(DATEDIFF(Day,cte.bestlevdat, dbo.bp.bestberlevdat)) AS Diff_Bekräftat_dat,
SUM(DATEDIFF(Day,cte.bestlevdat, dbo.bp.bestbeglevdat)) AS Diff_Önskat_dat, COUNT(dbo.bp.bestradnr) AS AntalRader, SUM(CASE WHEN datediff(day, cte.bestlevdat, dbo.bp.bestberlevdat) < - 0 THEN 1 ELSE 0 END) AS Antal_avvikande_rader, ROUND((COUNT(dbo.bp.bestradnr) - SUM(CASE WHEN datediff(day, cte.bestlevdat, dbo.bp.bestberlevdat) < - 0 THEN 1.0 ELSE 0.0 END)) * 100/COUNT(dbo.bp.bestradnr), 1) AS Levsäk
FROM dbo.bp INNER JOIN
cte ON dbo.bp.bestnr = cte.bestnr AND dbo.bp.bestradnr = cte.bestradnr
WHERE (YEAR(dbo.bp.bestberlevdat) = '2015')
GROUP BY dbo.bp.ftgnr
ORDER BY AntalRader DESC
Это произведение очарования. Но когда я создаю новое представление и вставляю этот запрос туда и пытаюсь сохранить, я получаю сообщение об ошибке «;» еще раз. Если я удалю ";" в SSMS я получаю ошибку «Идентификатор многосекционного„cte.bestlevdat“не могут быть связаны», а также преобразует мой запрос к следующим:
WITH cte AS (SELECT DISTINCT bestlevdat, bestradnr, bestnr
FROM dbo.bpa AS bpa_1)
SELECT TOP (100) PERCENT dbo.bp.ftgnr AS Företagsnr, SUM(DATEDIFF(Day, cte_1.bestlevdat, dbo.bp.bestberlevdat)) AS Diff_Bekräftat_dat, SUM(DATEDIFF(Day,
cte_1.bestlevdat, dbo.bp.bestbeglevdat)) AS Diff_Önskat_dat, COUNT(dbo.bp.bestradnr) AS AntalRader, SUM(CASE WHEN datediff(day, cte.bestlevdat,
dbo.bp.bestberlevdat) < - 0 THEN 1 ELSE 0 END) AS Antal_avvikande_rader, ROUND((COUNT(dbo.bp.bestradnr) - SUM(CASE WHEN datediff(day, cte.bestlevdat,
dbo.bp.bestberlevdat) < - 0 THEN 1.0 ELSE 0.0 END)) * 100/COUNT(dbo.bp.bestradnr), 1) AS Levsäk
FROM dbo.bp INNER JOIN
cte AS cte_1 ON dbo.bp.bestnr = cte_1.bestnr AND dbo.bp.bestradnr = cte_1.bestradnr
WHERE (YEAR(dbo.bp.bestberlevdat) = '2015')
GROUP BY dbo.bp.ftgnr
ORDER BY AntalRader DESC
Извините, если я пропустил что-то очевидное, но я довольно новый с запросами, и это моя первая попытка «Просмотр».
выборки данных из обоих таблицы помогут. – mxix
Почему * не * вы хотите их сосчитать? Что, если в таблице 2 есть * два таких строки? Как вы решаете, что это хлам? Почему бы вам не удалить его из таблицы 2? –
Я создаю статистику надежности доставки. Столбец6 - номер заказа, столбец 5 - номер строки заказа. Когда номер строки заказа поступает дважды по тому же номеру заказа, мы сделали две или более отдельных транзакций в этой строке из-за разных обстоятельств. Поэтому я не хочу рассчитывать с одинаковым отклонением дважды. – SisU