1

我见过这个问题的几个不同版本,但很难将它应用到我需要的东西......

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 上获得不同的值。使用 distinct 不会像整个行上的不同工作一样起作用。

帮助将不胜感激。

谢谢!

4

5 回答 5

2

如果您希望原始查询中的所有结果列并且希望每个 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
于 2009-10-09T15:00:51.387 回答
1

请求具有相同receiptID 的多行之一是不明确的。您想如何从其他行中选择这一行?

于 2009-10-09T14:57:33.013 回答
1

我已经使用 MIN 或 MAX 聚合函数完成了这项工作,这似乎工作得很好,并且比我见过的大多数其他方法更容易编写。

所以它会是这样的:

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

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

于 2009-10-09T15:02:24.877 回答
0

DISTINCT 对整行是不同的。尝试GROUP BY ReceiptID,当然其他列的值可能没有意义,因为它只会选择一行。

于 2009-10-09T14:58:13.797 回答
0
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可能非常不理想的需求。

此外,通过更改ORDER BY子句,您可以选择FolderLink如果有多个要返回的子句。

于 2009-10-09T15:02:05.393 回答