SQL Query会出现重复的结果

时间:2016-01-13 12:00:58

标签: sql sql-server

我的查询如下。它给了我两次相同的价值。请看看

SELECT distinct T0.[ItemCode],T0.[Dscription] ,T0.[Project],  T0.[Quantity] as [Recipts], T0.[DocDate], T0.[Project], T1.[Quantity] as [Issues] ,(T0.[Quantity] -T1.[Quantity]) as 'ABC' 
FROM [dbo].[IGN1]  T0 
INNER JOIN  IGE1 T1 ON T0.[DocDate] = T1.[DocDate] 
where T0.WhsCode = 'RecBay' 
and T0.[DocDate] = '13jan2016' 
and T0.[ItemCode] = 'Abebatest' 
and T0.[Project] = 'GHS01' 
GROUP BY T0.[ItemCode], T0.[Dscription] ,T0.[Project] ,T0.[DocDate] ,T0.[Dscription] ,T0.[Quantity], T1.[Quantity]

我得到以下输出

| # | Item No.  | Item/Service Description | Project Code | Recipts  | Posting Date | Project Code | Issues | ABC      |
|---|-----------|--------------------------|--------------|----------|--------------|--------------|--------|----------|
| 1 | Abebatest | Abebatest                | GHS01        | 100      | 13.01.2016   | GHS01        | 50     | 50       |
| 2 | Abebatest | Abebatest                | GHS01        | 100      | 13.01.2016   | GHS01        | 100    | 0        |
| 3 | Abebatest | Abebatest                | GHS01        | 200      | 13.01.2016   | GHS01        | 50     | 150      |
| 4 | Abebatest | Abebatest                | GHS01        | 200      | 13.01.2016   | GHS01        | 100    | 100      |
| 5 | Abebatest | Abebatest                | GHS01        | 2,000.00 | 13.01.2016   | GHS01        | 50     | 1,950.00 |
| 6 | Abebatest | Abebatest                | GHS01        | 2,000.00 | 13.01.2016   | GHS01        | 100    | 1,900.00 |

| # | Item No. | Item/Service Description | Project Code | Recipts | Posting Date | Project Code | Issues | ABC | |---|-----------|--------------------------|--------------|----------|--------------|--------------|--------|----------| | 1 | Abebatest | Abebatest | GHS01 | 100 | 13.01.2016 | GHS01 | 50 | 50 | | 2 | Abebatest | Abebatest | GHS01 | 100 | 13.01.2016 | GHS01 | 100 | 0 | | 3 | Abebatest | Abebatest | GHS01 | 200 | 13.01.2016 | GHS01 | 50 | 150 | | 4 | Abebatest | Abebatest | GHS01 | 200 | 13.01.2016 | GHS01 | 100 | 100 | | 5 | Abebatest | Abebatest | GHS01 | 2,000.00 | 13.01.2016 | GHS01 | 50 | 1,950.00 | | 6 | Abebatest | Abebatest | GHS01 | 2,000.00 | 13.01.2016 | GHS01 | 100 | 1,900.00 |

2 个答案:

答案 0 :(得分:0)

DISTINCT遍及整行,而不仅仅是ItemCode

在您的情况下,如果您逐列比较它们,则所有记录都是唯一的。

<强>更新

DISTINCT仅返回唯一的结果集记录。例如,如果您有下表:

+------+------+
| Col1 | Col2 |
+------+------+
|    1 | a    |
|    1 | b    |
|    2 | c    |
|    2 | c    |
+------+------+

然后针对它运行以下脚本:

SELECT DISTINCT Col1, Col2 FROM TABLE

仅返回第1,2和3行。 (即使第1行和第2行Col1相同,Col2也会使row不同。)

最后,DISTINCT适用于结果集,而不是基表。这意味着,在您的实例中,列abc是问题的原因,即使它是计算字段。

答案 1 :(得分:0)

Distinct消除了重复的行!这意味着只有在所有列值相等时才会删除行。 这意味着如果任何其他列值不相等,则可以有10次具有相同T0.[ItemCode]的行。但是每列都不能有相同值的行。在多列上使用时,Group By也无法消除单列的重复项。 不要在Group By上使用T0.[Quantity], T1.[Quantity],请使用聚合。