有点模糊在得到DISTINCT上一列?(A little fuzzy on getting DIST

2019-10-17 20:00发布

我已经看到了一些不同版本的问题,但它适用于什么,我需要有困难...

MS SQL Server 2008的查询:

SELECT Receipts.ReceiptID, Receipts.UserID, Receipts.UserCardID, FolderLink.ReceiptFolderLinkID
FROM dbo.tbl_ReceiptFolderLnk AS FolderLink 
    INNER JOIN dbo.tbl_Receipt AS Receipts ON FolderLink.ReceiptID = Receipts.ReceiptID

**

ReceiptID            UserID               UserCardID           ReceiptFolderLinkID
-------------------- -------------------- -------------------- --------------------
1                    1                    3                    2
2                    1                    3                    3
3                    1                    3                    10
4                    1                    4                    11
5                    1                    4                    13
6                    2                    5                    14
3                    1                    3                    15
4                    1                    4                    16

**

现在,我想在ReceiptID得到不同的值。 使用不同的都不行整行上为不同的作品。

帮助将不胜感激。

谢谢!

Answer 1:

如果你想在原来的查询结果全部列和希望每个ReceiptID只显示了一个时间,你需要使用GROUP BY。

喜欢:

SELECT Receipts.ReceiptID,
    MIN(Receipts.UserID),
    MIN(Receipts.UserCardID),
    MIN(FolderLink.ReceiptFolderLinkID)
FROM dbo.tbl_ReceiptFolderLnk AS FolderLink
INNER JOIN dbo.tbl_Receipt AS Receipts ON FolderLink.ReceiptID = Receipts.ReceiptID
GROUP BY Receipts.ReceiptID


Answer 2:

与同receiptID要求很多行的一个是模糊的。 你怎么想选择从其他人一排?



Answer 3:

我已经与这似乎工作得很好,就简单得多了,比我见过的大多数其他方法来写MIN或MAX聚合函数做到了这一点。

所以它会是这样的:

SELECT [ColumnA], MIN(ColumnB) AS ColumnB, MIN(ColumnC) AS ColumnC 
FROM MyTable 
GROUP BY ColumnA

在这种情况下ColumnA将是不同的列。



Answer 4:

DISTINCT是不同的整行。 试着GROUP BY ReceiptID ,当然对于其他列的值可能是没有意义的,因为它会随便挑一个行。



Answer 5:

SELECT  Receipts.ReceiptID, Receipts.UserID, Receipts.UserCardID, ReceiptFolderLinkID
FROM    dbo.tbl_Receipt AS Receipts
CROSS APPLY
        (
        SELECT  TOP 1 FolderLink.ReceiptFolderLinkID
        FROM    dbo.tbl_ReceiptFolderLnk FolderLink
        WHERE   FolderLink.ReceiptID = Receipts.ReceiptID
        ORDER BY
                FolderLink.ReceiptFolderLinkID
        ) fl

这将消除需要GROUP BYDISTINCT这可能是相当inoptimal。

此外,通过改变ORDER BY子句中你可以选择FolderLink要返回如果有muptiple。



文章来源: A little fuzzy on getting DISTINCT on one column?