2016-02-26 70 views
0

以下是我爲建立技術編號而創建的查詢。我無法讓它工作。我收到此錯誤消息:Select Statement中的變量

子查詢返回的值超過1。

查詢:

declare @TechNum int = 
    (Select Case When CF_Technician='David' Then 9 When 
     CF_Technician='David N' Then 9 When 
     CF_Technician='David Nunez' Then 9 When 
     CF_Technician='Joe Nicholson' Then 8 When 
     CF_Technician='Joe Nicholson' Then 8 When 
     CF_Technician='Josh Fogleman' Then 7 When 
     else 0 
     End 
    From OptimazationItems) 

Select 
    ItemID, 
    [email protected] 
From 
    OptimazationItems 

有什麼不對?爲什麼我不能在select語句中使用變量?什麼是完成這個最好的方法?

我知道我可以創建另一個視圖,然後加入它。有沒有辦法在一個查詢中做到這一點?

回答

0

您可以使用一個變量,但您已經爲其分配了一個子查詢,該子查詢最多返回一行。您分配的子查詢明顯返回多行。單獨運行子查詢,您會看到它返回多行。

重寫子查詢只返回(最多)一行。您可能需要添加WHERE子句或SELECT TOP 1 + ORDER BY some_column以選擇特定的行。


從評論看來,你不明白我在說什麼。你可能要寫的是以下內容。

SELECT 
    ItemID, 
    TechNum=CASE CF_Technician 
      WHEN 'David'   THEN 9 
      WHEN 'David N'  THEN 9 
      WHEN 'David Nunez' THEN 9 
      WHEN 'Joe Nicholson' THEN 8 
      WHEN 'Joe Nicholson' THEN 8 
      WHEN 'Josh Fogleman' THEN 7 
      ELSE 0 
      END 
FROM 
    OptimazationItems 

你不能用變量寫這個select語句。例如

+0

。你可以給出更具體的例子 –

+0

@atlasbeencounter你可以給'@ TechNum'分配一個子查詢的結果。複製/粘貼該子查詢,然後執行它。告訴我它返回的行數。如果它不止一個,請向我解釋如何將它分配給只能包含一個值的單個變量。 –

+0

@AtlasBeencounter用您正在查找的查詢更新了我的答案。 –