1

SQL Server で重複した行からレコードを 1 つだけ戻す必要があります

このようなデータがあります

-------------------------------------------
CustomerID, OrderID, ProductID, Title
-------------------------------------------
1,1001,131,orange
1,1002,131,orange
-------------------------------------------

これらの行は、同じ人によって注文された 2 つのアイテムとして表示されます。実際には、バスケットで選択された数量と 2 つのレコードとして 2 つだけです。

私の質問は、これらの行の 1 つだけを取得するにはどうすればよいですか?

ありがとう

4

4 に答える 4

5

多分このようなもの:

最初のいくつかのテスト データ:

DECLARE @tbl TABLE(CustomerID INT,OrderID INT,ProductID INT,Title VARCHAR(100))

INSERT INTO @tbl
VALUES
    (1,1001,131,'orange'),
    (1,1002,131,'orange')

次に、クエリ

;WITH CTE AS
(
    SELECT
        ROW_NUMBER() OVER(PARTITION BY tbl.CustomerID,tbl.ProductID,tbl.Title 
              ORDER BY tbl.OrderID) AS RowNbr,
        tbl.CustomerID,
        tbl.OrderID,
        tbl.ProductID,
        tbl.Title
    FROM
        @tbl AS tbl
)
SELECT
    *
FROM
    CTE
WHERE
    CTE.RowNbr=1
于 2012-02-16T16:25:55.357 に答える
4

このようにして、両方の行の1つだけでなく、注文された数量も取得できます

SELECT 
   CustomerID, ProductID, Title, max(OrderID) as orderID, COUNT(*) as quantity
FROM 
  TableName 
GROUP BY 
   CustomerID, 
   ProductID, 
   Title 
于 2012-02-16T16:28:28.693 に答える
2

Max を使用すると、最新の注文が取得されます

SELECT CustomerID, MAX(OrderId), ProductID, Title
FROM table
GROUP BY CustomerID, ProductID, Title

また

Min を使用すると、最初の注文が得られます

SELECT CustomerID, MIN(OrderId), ProductID, Title
FROM table
GROUP BY CustomerID, ProductID, Title
于 2012-02-16T16:24:21.447 に答える
1

それが本当にあなたが望むものであれば、グループ化と MIN 関数を使用して、同じ顧客、製品、およびタイトルで各注文の最初の注文を取得できます (MAX は最後の注文を提供します)。

SELECT CustomerID, MIN(OrderID) AS OrderID, ProductID, Title 
FROM MyTable
GROUP BY CustomerID, ProductID, Title

重複した注文の数が必要な場合 (質問から判断すると、注文数量になります)、カウントを追加できます。

SELECT CustomerID, MIN(OrderID) AS OrderID, ProductID, Title, 
    COUNT(*) AS Quantity 
FROM MyTable
GROUP BY CustomerID, ProductID, Title
于 2012-02-16T16:21:47.830 に答える