我需要帮助解决这个问题。基于2列的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
但这不是我想要的,因为有一些是组合值第5列和第6列是相同的。见下文。
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年2月9日
我做在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是订单行号。当订单行号在同一订单号上出现两次时,由于情况不同,我们在该行上进行了2次或多次单独的交易。所以我不想用相同的偏差计算两次。 – SisU