2014-09-25 76 views
-4

我寫了查詢,但我得到這個錯誤:SQL Server錯誤:子查詢返回多個值

Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

這是我的查詢:

SELECT 
    d.Description, 
    s.Version, 
    d.UtiPrefix, 
    d.UTI, 
    d.PrimaryAC, 
    s.ReportingObb, 
    s.ReportingObb, 
    d.LEI, 
    d.LEI_Countp, 
    d.LEI, 
    s.ReportingDeleg, 
    d.Curr, 
    c.Trade_Party_Domicile, 
    c.LEI_SGR, 
    Price = (
     SELECT Price 
     FROM Price p 
     WHERE p.DATE = '2014-09-15 00:00:00.000' 
     ) 
FROM 
    Derivatives AS d 
INNER JOIN 
    Settings AS s ON d.LEI_SGR = s.LEI_SGR 
INNER JOIN 
    Clients c ON d.LEI_SGR = c.LEI_SGR 
WHERE 
    c.LEI_SGR = '8156008BA0ABD6B3AE15' 
+0

您的子查詢返回多個行。任何外鍵有價格然後加入,也在子查詢 – Sathish 2014-09-25 14:14:33

+0

你的問題是什麼?錯誤信息是不言自明的。 – 2014-09-25 14:17:38

+0

改爲選擇適當的單價。 – Randy 2014-09-25 14:18:21

回答

0

這是因爲你的子查詢SELECT Price FROM Price p WHERE p.DATE = '2014-09-15 00:00:00.000'是返回多行。您的Price表對於2014-09-15有多個price

更新:我在另一個答案的評論中看到,您希望在結果中顯示該日期的所有價格。您需要將price表加入您的查詢。不要在SELECT子句中查詢price表。

SELECT d.Description, 
    s.Version, 
    d.UtiPrefix, 
    d.UTI, 
    d.PrimaryAC, 
    s.ReportingObb, 
    s.ReportingObb, 
    d.LEI, 
    d.LEI_Countp, 
    d.LEI, 
    s.ReportingDeleg, 
    d.Curr, 
    c.Trade_Party_Domicile, 
    c.LEI_SGR, 
    p.Price 
FROM Derivatives AS d 
INNER JOIN Settings AS s 
    ON d.LEI_SGR = s.LEI_SGR 
INNER JOIN Clients c 
    ON d.LEI_SGR = c.LEI_SGR 
,price p 

WHERE c.LEI_SGR = '8156008BA0ABD6B3AE15' and p.date = '2014-09-15 00:00:00.000' 
+0

是的,我知道,但最新的解決方案是什麼請 – user3826166 2014-09-25 14:18:32

+0

如果該日期的價格表中有多個記錄,那麼你需要決定哪個價格記錄你想選擇。 max(價格),avg(價格),TOP 1價格,刪除該日期表中的所有其他價格。我無法告訴你如何選擇正確的價格。 – JNevill 2014-09-25 14:24:11

+0

我已經添加了一個SQL語句到我的答案,將交叉加入價格到您的查詢結果給你多個記錄,每個價格'2014-09-15' – JNevill 2014-09-25 14:27:42

1

由於錯誤消息告訴你,你的子查詢返回多個結果。您可以修復它這樣:

對於MySQL:

SELECT Price 
FROM Price p 
WHERE p.DATE = '2014-09-15 00:00:00.000' 
LIMIT 1 

對於T-SQL:

SELECT TOP 1 Price 
FROM Price p 
WHERE p.DATE = '2014-09-15 00:00:00.000' 

希望這將幫助你

+0

我已經嘗試與頂部(1),但感染我需要顯示所有的價格根據該日期,所以我不能選擇只有1 – user3826166 2014-09-25 14:23:04

+0

在這種情況下,您的問題是不是解決錯誤,但爲了解決您的查詢,以獲得預期結果 – 2014-09-25 14:25:14

1

你需要從恢復力的子查詢不止一行。

一種方法是使用MAX()

... 
Price = (
    SELECT MAX(Price) 
    FROM Price p 
    WHERE p.DATE = '2014-09-15 00:00:00.000' 
    ) 
... 

其他選項:

  • AVG()
  • MIN()
  • TOP 1/LIMIT 1(ETC取決於數據庫)