表单元格用于计算其他表中的行数

时间:2014-05-05 17:20:59

标签: sql tsql

我不确定我是否能以正确的方式解决这个问题。 MVC + EF站点,所以我可以在控制器中执行此操作,但如果可能的话,我更喜欢它在数据库中。

我有两张桌子。一个包含条目,一个包含成员列表。我希望成员列表有一个列,其中包含成员名称在条目列表中出现的次数。我可以在表格本身的定义中这样做吗?

我知道这个查询有效:

select count(*)
from dbo.Entries
where dbo.Entries.AssignedTo = 'Bob Smith'

但有没有办法做到这一点?什么是正确的语法?

CREATE TABLE [dbo].[Members] (
[ID]    INT            IDENTITY (1, 1) NOT NULL,
[Name]  NVARCHAR (100) NOT NULL,
[Email] NVARCHAR (500) NOT NULL,
[Count] INT = select count(*) from dbo.Entries where dbo.Entries.AssignedTo = [Name]
PRIMARY KEY CLUSTERED ([ID] ASC)

我已经做了一些搜索,并尝试了一些不同的语法,但我现在完全迷失了,所以如果有人能让我朝着正确的方向前进,我会非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以创建Members作为结合Entries数据和另一个表的视图。 (警告:未测试语法)

CREATE TABLE [_member_data] (
  [ID]   INT IDENTITY(1, 1) NOT NULL,
  [Name]  NVARCHAR (100) NOT NULL,
  [Email] NVARCHAR (500) NOT NULL,
  PRIMARY KEY CLUSTERED ([ID] ASC)
);

CREATE VIEW [dbo].[Members] AS
  SELECT ID, Name, Email, COUNT(*)
    FROM _member_data JOIN dbo.Entries ON [Name] = [AssignedTo]
    GROUP BY 1, 2, 3;

可以使用触发器/规则更进一步,将触发器重写为Members作为插入到适当的支持表。但是为了获得您正在寻找的那种富有表现力的信息,您真的想要使用视图进行探索。