2010-03-07 40 views
0

執行以下代碼後,我在關鍵字'select'附近獲取錯誤語法。執行查詢時關鍵字'select'附近的語法不正確

declare @c int 

SELECT @c = COUNT(*) 
    FROM (select id, max(date_stored) 
     from table B 
    INNER JOIN table P ON B.id = P.id 
     where id = 3) 

select @c 

我想選擇在數據庫中有最大存儲日期的記錄總數。任何一個可以PLZ告訴什麼我也做什麼錯

+0

它失敗表別名的目的,如果你不一致使用它們。哪個表是來自「id」值的表,因爲未指定將導致「模棱兩可的列引用」錯誤,因爲該列存在於兩個表中。 –

回答

0
declare @c int 
SELECT @c = COUNT(aName.[ID]) FROM 
(
    select [B.id], max(B.date_stored) 
    from table B 
    INNER JOIN table P ON B.id = P.id 
    where B.id = 3 
    -- group by [id] ??? 
) aName 

select @c 
+0

只需將max(B.date_stored)定義爲MaxDate即可解決該問題 – sam

0
SET @C = SELECT COUNT(*) FROM ... 

,你需要做在內部SELECT一個GROUP BY?什麼是「max()」電話應該是什麼意思?那個「date_stored」字段在哪個表中?我認爲你應該首先解決內部查詢問題,然後繼續完成計數。

如果您想要計數記錄的日期值等於給定「id」值的所有日期值中最新的值,那麼您需要明確指出(除非SQL Server 2005具有一些整潔的新功能,我不知道)。

+0

你試過你的代碼嗎? (這可能是一個反問的問題。) –

+0

max(date_stored)正被用來計算給定id的最新date_stored,假設每個id有多於一行。 date_stored在表b中。還有一個表別名,在進行連接時,您必須確定您所引用的列。 –

+0

@joe是每個ID都有更多的日期列..所以我只想得到最大日期列。但它仍然不會工作...在定義了一個別名後,它表示沒有爲'aName'的列2指定列 – sam

1

需要別名子查詢

declare @c int 
SELECT @c = COUNT(*) FROM 
(
    select id, max(date_stored) 
    from 
    table B 
    INNER JOIN 
    table P 
    ON 
    B.id = P.id 
    where 
    id = 3 
) x --alias 
select @c 

我還是不明白,爲什麼玩具是由和最大的子查詢從事羣體,如果你需要的是一個計數

+0

爲什麼他需要別名子查詢? – Pointy

+0

@Pointy:因爲TSQL是如何工作的,他爲什麼會出錯。 – Hogan

+0

從第一個選擇需要別名 –

相關問題