有没有办法可以连接两个表然后按其中一个表中的字段分组?

时间:2017-02-21 06:13:40

标签: sql-server

我有两个表:Phrase和PhraseCategory

它们与Phrase.CategoryId == PhraseCategory.PhraseCategoryShortId

相关联
CREATE TABLE [dbo].[Phrase] (
    [PhraseId]     UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [English]      NVARCHAR (250)   NOT NULL,
    [CategoryId]   INT              NULL,
    PRIMARY KEY CLUSTERED ([PhraseId] ASC)
);


CREATE TABLE [dbo].[PhraseCategory] (
    [PhraseCategoryShortId] INT              IDENTITY (1, 1) NOT NULL ,
    [Name]                  VARCHAR (100)    NOT NULL,
    PRIMARY KEY CLUSTERED ([PhraseCategoryShortId] ASC)
);

有人可以帮我就如何加入这些建议提供一些建议,以便我得到一份如下报告:

PhraseCategory.Name        Qty

其中,数量是每个类别中的短语数量。

我还需要按照PhraseCategory.Name

的顺序对报告进行排序

2 个答案:

答案 0 :(得分:0)

除非我遗漏了一些东西,否则这只是一个加入

如果您只想要具有词组条目的短语类别

SELECT PhraseCategory.name, count(*) AS qty
  FROM Phrase
  JOIN PhraseCategory
    ON Phrase.CategoryId = PhraseCategory.PhraseCategoryShortId
 GROUP BY PhraseCategory.name

如果您对所有名称感兴趣,包括没有短语条目的名称

,请使用LEFT JOIN

答案 1 :(得分:0)

如果您加入他们,在查询开始时您正在编写SELECT ColA, ColB, ...,您可以在此之后创建GROUP BY。它看起来像:

SELECT Sum( ColC ), ColA, ColB
   FROM (
       SELECT t1.ColA, t1.ColB, t2.ColC
       FROM Table1 t1, Table2 t2
       WHERE t1.ColB = t2.ColB) r
GROUP BY r.ColC