在select语句中添加一列会添加更多行吗?

时间:2018-08-23 18:21:36

标签: sql distinct

我正在尝试从联接表中添加一列,但是当我这样做时,它将返回更多行。这是原始查询:

SELECT DISTINCT ppa.*
FROM pbf_PayableApproval ppa WITH (NOLOCK)
INNER JOIN PayableDetail pd
ON ppa.PybleHdrID = pd.PybleHdrID
INNER JOIN TransactionType tt WITH (NOLOCK)
ON tt.TrnsctnTypID = pd.TrnsctnTypID
WHERE ppa.ApprovedByUserID IS NULL
AND ppa.Approved = 'Y'
ORDER BY ApprovalID

它返回约85行

但是然后我像这样添加一列,它返回200多个。

SELECT DISTINCT tt.TrnsctnTypDesc, ppa.*
FROM pbf_PayableApproval ppa WITH (NOLOCK)
INNER JOIN PayableDetail pd
ON ppa.PybleHdrID = pd.PybleHdrID
INNER JOIN TransactionType tt WITH (NOLOCK)
ON tt.TrnsctnTypID = pd.TrnsctnTypID
WHERE ppa.ApprovedByUserID IS NULL
AND ppa.Approved = 'Y'
ORDER BY ApprovalID

1 个答案:

答案 0 :(得分:0)

SELECT DISTINCT正在查看选择列表中的 all 列。这很容易看到。考虑以下数据:

X    Y
1    a
1    b
1    c

查询:

select distinct x
from t;

返回一行-值为1

查询:

select distinct x, y
from t;

返回所有三行。

通常,如果希望一个或多个列组合是不同的,则可以使用group by。切记对其余的列使用聚合函数。所以这个查询:

select x, min(y), max(y0
from t
group by x;

x返回一行(即一行),并包含y的最小值和最大值。