2012-10-26 172 views
-4

如何在查詢中選擇一個不同的值,當有當我做這樣我得到一個錯誤多列選擇一個獨特的價值

select distinct tempname,rundate from History_Table ORDER BY RunDate DESC 

編輯::

我有顯示這樣在我的GridView

Name Rundate 
Test DDL(to show all the rundates) 
Test1 rundate 
+3

你有什麼錯誤? –

+0

我沒有得到一個錯誤,但得到重複的名字 –

+2

DISTINCT在整組列上工作。所以你得到重複的tempname或rundate,但從來沒有整個行的重複。 – Steve

回答

2

DISTINCT給不同的行

看來你的tempnam需要e與一個rundate(最後,第一等)。這可以通過使用GROUP BY來實現。以下示例將給出帶最後一個Rundate的結果tempname

SELECT tempname,MAX(rundate) AS rundate FROM History_Table GROUP BY tempname 

也可以使用ORDER BY。

SELECT tempname,rundate 
FROM 
(SELECT tempname,MAX(rundate) AS rundate FROM History_Table GROUP BY tempname) AS SummaryTable 
ORDER BY rundate 
+0

但我需要得到與名稱 –

+1

相關的所有分支所以你的查詢有什麼問題?它已經給它。不是嗎? – Prasanna

0

聽起來像你需要兩個單獨的querys。一個獲得不同的臨時名稱,另一個獲取分類。您目前的查詢正確返回兩者的不同組合。

+0

Prasanna的回答聽起來更像你想要的。如果不知道你想從查詢中找到什麼,很難確定。 –

+0

如果我使用替代查詢我得到錯誤代碼 –

2

它看起來像你想連接你的運行日期成一個單一的字符串。這可以通過使用SQL服務器的XML擴展來完成:

SELECT t1.TempName, 
     STUFF((SELECT ', [' + CONVERT(VARCHAR, t2.RunDate, 103) + ']' 
       FROM History_Table t2 
       WHERE t1.TempName = t2.TempName 
       ORDER BY t2.RunDate 
       FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') [RunDates] 
FROM ( SELECT DISTINCT TempName 
      FROM History_Table 
     ) t1 

Example SQL Fiddle

如何使用XML連接字符串的完整說明包含在另一個答案here,一點點的幫助KM's answer to another question

+0

這是我想我想我會檢查一次,我可以刪除[]? –

+0

刪除括號不會影響查詢,也不會將日期格式從103('dd/MM/yyyy')更改,我只是添加它以使結果更清晰。 – GarethD

+0

但事情是我必須填寫一個標籤和下拉使用此查詢將它的工作? –