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 で個別の値を取得したいと考えています。個別の使用は、行全体で個別に機能するため機能しません。

助けていただければ幸いです。

ありがとう!

4

5 に答える 5

2

元のクエリのすべての結果列が必要で、各 ReceiptID が 1 回だけ表示されるようにする場合は、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

同じ領収書 ID を持つ多くの行の 1 つを要求するのはあいまいです。他の行からその行をどのように選択しますか?

于 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 BYorの必要性DISTINCTがなくなります。

また、句を変更することで、複数ある場合にどちらを返すかをORDER BY選択できます。FolderLink

于 2009-10-09T15:02:05.393 に答える