> 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
从上表中我想要以下
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
答案 0 :(得分:2)
当你有GROUP BY子句时,你需要在字段上使用聚合函数(比如FIRST(),LAST(),MAX(),AVG()......)。此外,如果您有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。
答案 1 :(得分:1)
这是一个解决方案
Select OptionName from myTable where ProductID = 709 limit 1
为什么group by有一个下划线
答案 2 :(得分:1)
尝试不使用此选项并使用OptionValue
select OptionName
from myTable
where ProductID = 709
group by OptionName, OptionValue
使用GROUP BY将为您提供不同的组合。
答案 3 :(得分:0)
使用GROUP BY OptionValue
你说的是这个......
- 正常查询我的查询中的所有记录
- 具有相同OptionValue的组记录
- 每个组只返回一条记录
在您的情况下,然后尝试返回OptionName。这是一个问题,因为每组显示多个OptionName,但每组只显示一条记录。
正如已经说过的那样,正确的查询取决于你需要什么,而且我不是100%清楚你所写的内容。 (给出一个你需要的结果的例子,以及如何得到这些结果,会有所帮助。)
我猜你只想要两条记录(Color
和Title
)。如果是这样,你可以做其中任何一个......
SELECT DISTINCT OptionName FROM myTable WHERE ProductID = 709
SELECT OptionName FROM myTable WHERE ProductID = 709 GROUP BY OptionName