2017-03-03 98 views
0

我有一張表,其中包含tryouts,customerID,status這一個試用版和其他一些帶有各種數據的列。T-SQL根據另一列中的最高值選擇不同的列表

當然,單個customerID可以有多個tryouts(在真正的表中第一次嘗試是數字1,第二個數字2等)。

Ex。

  • 客戶ID = 1,試用= 1
  • 客戶ID = 1,試用= 2
  • 客戶ID = 1,試用= 3
  • 客戶ID = 2,試用= 1
  • 客戶ID = 3,試用= 1
  • 客戶ID = 3,試模= 2

我想擁有所有截然不同的customerIDs,但每個行只有一行,它包含一個表中每個客戶的最高tryout數字以及來自所有其他列的數據。例如, tryoutscustomerIDstatusdata1data2

我怎樣才能做到這一點?

回答

1

如果你只希望客戶ID和試用值,那麼你可以嘗試以下方法:

SELECT customerID, MAX(tryout) AS max_tryout 
FROM yourTable 
GROUP BY customerID 

如果你想整個記錄,那麼其中一個方案是使用ROW_NUMBER()

SELECT t.customerID, t.tryout, t.status, t.data1, t.data2 
FROM 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY customerID ORDER BY tryout DESC) rn 
) t 
WHERE t.rn = 1 
+0

謝謝。如果我還想從所有列中獲取數據,但是我的情況如何,但是我的退出條件和客戶ID仍然存在?防爆。試用,客戶ID,狀態,data1,data2 – NihilisticWonder

+0

@NihilisticWonder我的第二個查詢解決了這個問題。重新加載您的頁面。 –

+0

我有點早...這隻返回我在where子句中定義的值。是定義類似where = max(列名)的方法嗎? – NihilisticWonder

0

嘗試

SELECT 
    CustomerID, 
    MAX(tryout) AS [Max tryout] 
FROM 
    TheTable 
GROUP BY 
    CustomerID 

這應該給你你想要什麼

相關問題