TSQL组按计算问题

时间:2015-11-10 16:23:19

标签: sql-server tsql group-by

我的问题有点难以解释。我有一个装满产品的桌子,我需要选择每个产品的第一个字母,如下所示:

SELECT      LEFT(PRODUCTS.ProductName, 1)

但是,我需要计算所有以字母开头的产品,然后在第二列中进行计算。例如:产品面包和产品黄油。然后我需要在第一列中输入字母'B',在第二列中输入'2',因为有两个产品以字母'B'开头。

SELECT      LEFT(PRODUCTS.ProductName, 1),
            COUNT(PRODUCTS.ProductName)
FROM        PRODUCTS
GROUP BY    PRODUCTS.ProductName

然而,上述代码为我提供了所有字母的产品,每次结果为“1”。

提前致谢!

2 个答案:

答案 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

相匹配