2011-05-20 31 views
0
> ID ProductID OptionName OptionValue    SKU 
> 
> 1   709  Title  Como test 
> 2   709  Color   Cobalt test 
> 3   709  Color   Crimson   RNA.331.02.MM1K 
> 4   709  Title   Como G2   RNA.331.02.MM1K 
> 7   709  Color   another color  test ipn 
> 8   709  Title   another title  test ipn 

值從上面的表格,我想下面的如何提取從SQL表

Select distinct OptionName from myTable where ProductID = 709 group by OptionValue 

但SQL Server是給在GROUP BY子句中的錯誤和不知道怎樣纔可以有各種不同的價值觀分組到不同的OptionName?

或者我不能?

我想要的結果如下

[0] => array 

    [Color] => array 
     [0] => Cobalt test 
     [1] => Crimson 
     [2] => another color 
    [Title] => array 
     [0] => Como test 
     [1] => Como G2 
     [2] => another title 
+2

的SQL語義錯誤的,但我不明白你想要什麼。您選擇一列(不使用組功能),而選擇另一列。這在語義上是不正確的。它由(不帶下劃線)組合而成。 – 2011-05-20 12:14:13

+0

SQL無法返回嵌套數組。你將不得不改變客戶端上的扁平行集。 – Andomar 2011-05-20 13:15:47

回答

2

您需要的字段(如FIRST(),上次(),MAX(),AVG()...)使用聚合函數您正在選擇何時有GROUP BY子句。而且,當你有GROUP BY時,distinct是不必要的。你能解釋一下你想要提取的數據,而不僅僅是發佈錯誤的查詢嗎?

編輯

SELECT OptionName, OptionValue FROM myTable WHERE ProductID = 709 ORDER BY OptionName ASC 

會產生這樣的:

> OptionName OptionValue    
> 
> Color   Cobalt test 
> Color   Crimson     
> Color   another color 
> Title   Como test  
> Title   Como G2 
> Title   another title 

轉換爲數組等是你在你的應用程序執行,不與SQL的東西。

+0

你能請幫助在SQL語法,以便我可以得到所有optionvalue分組在不同的optionnames謝謝 – 2011-05-20 12:53:08

+0

我編輯我的答案。 – Jacob 2011-05-20 13:04:51

+0

我想明確的選項名稱 – 2011-05-20 13:10:32

1

這裏是一個解決方案

Select OptionName from myTable where ProductID = 709 limit 1 

爲什麼組由具有下劃線

+0

我已更正查詢,請再次查看問題。謝謝 – 2011-05-20 12:54:09

1

嘗試沒有不同,並與OptionValue在那裏

select OptionName 
from myTable 
where ProductID = 709 
group by OptionName, OptionValue 

使用GROUP BY會給你不同的組合。

0

使用GROUP BY OptionValue你說這...
- 從我的查詢中的所有記錄正常
- 組記錄了具有相同OptionValue
- 返回爲每個組只有一條記錄

在你的情況下,你然後嘗試返回OptionName。這是一個問題,因爲每個組有多個選項名稱顯示,但每個組只能有一條記錄。


正如人們所說的,正確的查詢取決於你需要什麼,我不是100%清楚你寫什麼。 (給你所需要的結果的一個例子,以及如何獲得這些成果,將有助於。)


我的猜測是,你只是想兩個記錄(ColorTitle)。如果是這樣,你可以做任何一個這些...

SELECT DISTINCT OptionName FROM myTable WHERE ProductID = 709

SELECT OptionName FROM myTable WHERE ProductID = 709 GROUP BY OptionName

+0

感謝您的回答,我已經更新了我的問題,請您回顧一下。 – 2011-05-20 13:00:13