我不确定我是否能以正确的方式解决这个问题。 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)
我已经做了一些搜索,并尝试了一些不同的语法,但我现在完全迷失了,所以如果有人能让我朝着正确的方向前进,我会非常感激。
提前致谢。
答案 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
作为插入到适当的支持表。但是为了获得您正在寻找的那种富有表现力的信息,您真的想要使用视图进行探索。