2013-04-12 57 views
1

我試圖做一個分類是SQL Server 2012中(查看SQL Fiddle演示)SQL Server的子查詢返回多個值

然而,當我介紹的子查詢,它檢索我下面的消息:「子查詢返回多個大於1名的值。當子查詢遵循=,!=,這是不允許的<,< =,>,> =或當子查詢用作表達

我應該使用什麼樣的腳本,而不是?

編輯:我想有以下輸出,基於SQL的小提琴演示:提前

CATEGORY REGION PRECIO CATEGORY 
Pepe   Paris  21  Other 
Pizza  Paris  21  Pizza 
Pizza  Paris  22  Pizza 
Salad  Paris  22  Other 
Beverage Vidreres 20  Beverage 
Beverage Vidreres 24  Beverage 
Pizza  Vidreres 19  Pizza 
Pizza  Vidreres 20  Pizza 

感謝。

+4

什麼是基於所需輸出上的示例記錄? –

+0

我現在要添加它 – Alfons

+0

剛剛檢查您的查詢看起來不正確。你期待什麼輸出? – IndoKnight

回答

2

試試這個。

SELECT *, case 
      when Category = 'Pizza' then 'Pizza' 
      when Category = 'Beverage' then 'Beverage' 
      else 'Other' end as Products 

FROM supportContacts 
Group by Region, Category, Precio 
2

你不需要子查詢對於

SELECT *, case 
     when Category = 'Pizza' then 'Pizza' 
      when Category = 'Beverage' then 'Beverage' 
     else 'Other' end as Products 
FROM supportContacts 
Group by Region, Category, Precio 

輸出:

| CATEGORY | REGION | PRECIO | PRODUCTS | 
------------------------------------------- 
|  Pepe | Paris |  21 | Other | 
| Pizza | Paris |  21 | Pizza | 
| Pizza | Paris |  22 | Pizza | 
| Salad | Paris |  22 | Other | 
| Beverage | Vidreres |  20 | Beverage | 
| Beverage | Vidreres |  24 | Beverage | 
| Pizza | Vidreres |  19 | Pizza | 
| Pizza | Vidreres |  20 | Pizza | 

SQLFiddle

+0

謝謝它的作品:) – Alfons

+0

此外,我應該介紹什麼來計算產品的數量。我的意思是,我想介紹另一列count(產品),但它不允許我。 – Alfons

+0

不客氣:D – peterm

1

我覺得你寫的查詢來獲得下面的結果。 ..

enter image description here

如果我有那麼你試試下面的查詢..

Select Category, Region, Precio,Products,count(Products) _Count from 
(Select Category, Region, Precio, 
case 
     when Category = 'Pizza' then 'Pizza' 
     when Category = 'Beverage' then 'Beverage' 
     else 'Other' 
end as Products 
FROM supportContacts) res 
Group by Category,Region,Precio,Products 
3

添加計數(請停止不斷變化的需求)。爲避免重複代碼,您可以在CTE中執行CASE表達式(您也可以使用派生表)。

;WITH x AS 
(
    SELECT Category, Region, Precio, 
    Products = CASE WHEN Category IN ('Pizza','Beverage') 
     THEN Category ELSE 'Other' END 
    FROM dbo.supportContacts 
) 
SELECT Category, Region, Precio, Products, 
    ProductCount = COUNT(*) OVER (PARTITION BY Products) 
FROM x; 

SQL fiddle demo

+0

是您的ProductCount值是否正確..? – Pandian

+0

@Pandian我不知道OP的要求是什麼;你知道嗎?我假設他希望每個類別的計數(派生列使用CASE表達式),而不是單個產品。 –

+0

OH ..!好,但我認爲他要求產品計入每個類別.. – Pandian