2013-08-28 108 views
1

我有這樣的樣表:如何使用聚合列獲取非聚合列的值?

ColA ColB ColC 
CBCP 25 popx 
ABC1 10 ppp1 
ABC1 25 ppxx 
CBCP 30 xm2x 

從那裏我想獲得這些列

ColA ColB ColC 
ABC1 25 ppxx 
CBCP 30 xm2x 

我希望的是獲得與最大COLB行。但我得到的錯誤,當我嘗試包括COLC我的查詢:

select ColA, max(ColB), ColC 
from tblCaseDev 
where ColB > getdate() group by ColA 

這是我的錯誤..

Msg 8120, Level 16, State 1, Line 1 
Column 'tblCaseDev.ColC' is invalid in the 
select list because it is not contained in either 
an aggregate function or the GROUP BY clause. 

希望有人可以幫助我..在此先感謝..

+1

在查詢中的列是不一樣在你的示例表。你能糾正它們嗎? – Khan

+0

哈哈哈對不起..不適合編輯它..感謝注意.. =) –

+0

什麼版本的SQL Server? – Khan

回答

2
SELECT 
CaseNo,Date,Remarks, 

(SELECT max(cast(Date as datetime)) FROM tblCaseDev subc WHERE subc.CaseNo=c.CaseNo Group by c.CaseNo) AS MaxEntryDate 

FROM tblCaseDev c 

order by CaseNo 
+0

你有兄弟嗎? –

0

您可以用遞減其ROW_NUMBER()每個組ColA並下令生成序列號通過ColB

SELECT  ColA, ColB, ColC 
FROM 
      (
       SELECT ColA, ColB, ColC, 
         ROW_NUMBER() OVER(PARTITION BY ColA 
              ORDER BY ColB DESC) rn 
       FROM tablename 
     ) x 
WHERE  rn = 1 

如果你想獲得這ColB佔用了多條記錄,則可能需要將其更改爲DENSE_RANK()

+0

我有一個新的錯誤..它說..消息195,級別15,狀態10,行5 'ROW_NUMBER'不是一個公認的函數名稱。 –

1

您想使用的row_number()窗函數:

select CaseNo, "Date", Remarks 
from (select t.*, row_number() over (partition by caseno order by date desc) as seqnum 
     from tblCaseDev t 
     where date > getdate() 
    ) t 
where seqnum = 1; 

編輯:

你可以這樣做的老式方法,如果你沒有做row_number()

select t.* 
from tblCaseDev t join 
    (select caseno, max(date) as maxdate 
     from tblCaseDev 
     group by caseno 
    ) tsum 
    on t.caseno = tsum.caseno and t.date = tsum.maxdate 
+0

我得到了一個新的錯誤..它說.. Msg 195,Level 15,狀態10,第5行'ROW_NUMBER'不是一個可識別的函數名稱。 –

+0

您使用的是哪個版本的SQL Server? –

+0

sql server 2008 –

1

您可以先創建一個聚合查詢,然後將原始表連接到聚合查詢。

例子:

SELECT 
    A.CaseNo, 
    A.Date, 
    B.Remarks 
FROM (
    SELECT 
     CaseNo, 
     MAX(Date) 
    FROM tblCaseDev 
    WHERE Date > GetDate() 
    GROUP BY CaseNo 
) A 
JOIN tblCaseDev B 
    ON A.CaseNo = B.CaseNo 
    AND A.Date = B.Date 
+0

我得到所有的備註..這第2列正在重複..我應該只得到對應的行的備註.. –

+0

我忘了將'A.Date'加入'B.Date'。請參閱修改。 – Khan