我的问题有点难以解释。我有一个装满产品的桌子,我需要选择每个产品的第一个字母,如下所示:
SELECT LEFT(PRODUCTS.ProductName, 1)
但是,我需要计算所有以字母开头的产品,然后在第二列中进行计算。例如:产品面包和产品黄油。然后我需要在第一列中输入字母'B',在第二列中输入'2',因为有两个产品以字母'B'开头。
SELECT LEFT(PRODUCTS.ProductName, 1),
COUNT(PRODUCTS.ProductName)
FROM PRODUCTS
GROUP BY PRODUCTS.ProductName
然而,上述代码为我提供了所有字母的产品,每次结果为“1”。
提前致谢!
答案 0 :(得分:0)
使用派生表,像这样...
SELECT
[First Letter],
COUNT(*) AS [Count]
FROM
(
SELECT
LEFT(Products.ProductName, 1) AS [First Letter]
FROM
Products
) DerivedFirstLettersOnly
GROUP BY
[First Letter]
ORDER BY
[First Letter] ASC
此处不需要派生表,但它更明确地规定您需要先获取第一个字母,然后进行计数。正如其他人所指出的那样,这可以在没有派生表的情况下一次完成。
答案 1 :(得分:0)
您需要按照区分数据的所有字段进行分组。
在这种情况下,您无法按ProductName
进行分组,因为这不是您实际计算的内容 - 您正在尝试计算多少{{1}每个字母都以开头。
您的ProductName
需要与Group By
- SELECT