CREATE TABLE Ta ( BomName VARCHAR(32) PRIMARY KEY, Status NVARCHAR(32) ) INSERT INTO ta(BomName,Status) VALUES('VS6620G_H',NULL) INSERT INTO ta(BomName,Status) VALUES('VS6621G_H',NULL) INSERT INTO ta(BomName,Status) VALUES('VS6622G_H',NULL) CREATE TABLE tb ( BomName VARCHAR(32), BOM_SM_RuleID INT )ALTER TABLE TB ADD CONSTRAINT FK_BomName FOREIGN KEY(BomName) REFERENCES ta(BomName)INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6620G_H',2) INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6620G_H',3) INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6620G_H',1)INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6621G_H',1) INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6621G_H',2)UPDATE ta SET ta.STATUS = tc.Status FROM ta INNER JOIN ( SELECT ta.BomName,ISNULL(t.counter,0) 'Counter','Status' = CASE WHEN ISNULL(t.counter,0) > 2 THEN N'全部' WHEN ISNULL(t.counter,0) <= 0 THEN N'未建' ELSE N'部分' END FROM ta LEFT JOIN ( SELECT ta.BomName, COUNT(ta.BomName) 'counter' FROM ta INNER JOIN TB ON ta.BomName = TB.BomName GROUP BY ta.BomName ) t ON ta.BomName = t.BomName ) tc ON ta.BomName = tc.BomName
如果以后添加了记录,那 ELSE N'部分' 这样写不是会报错吗?
如果以后添加了记录,那 ELSE N'部分' 这样写不是会报错吗? Case 1 ) 在tb中插入ta中存在的记录,只需要执行Update语句就行 Case 2) 在tb中插入ta中不存在的记录,由于存在外键关系,需要先在ta中加入记录,然后在tb中插入数据,最后更新Update语句。 所以,Case2比Case1多一步操作,需要满足外键引用。
如果以后添加了记录,那 ELSE N'部分' 这样写不是会报错吗? Case 1 ) 在tb中插入ta中存在的记录,只需要执行Update语句就行 Case 2) 在tb中插入ta中不存在的记录,由于存在外键关系,需要先在ta中加入记录,然后在tb中插入数据,最后更新Update语句。 所以,Case2比Case1多一步操作,需要满足外键引用。不明白啊,能劳驾您再给贴下代码吗?
如果以后添加了记录,那 ELSE N'部分' 这样写不是会报错吗? Case 1 ) 在tb中插入ta中存在的记录,只需要执行Update语句就行 Case 2) 在tb中插入ta中不存在的记录,由于存在外键关系,需要先在ta中加入记录,然后在tb中插入数据,最后更新Update语句。 所以,Case2比Case1多一步操作,需要满足外键引用。不明白啊,能劳驾您再给贴下代码吗? case1) 在tb中插入ta中存在的记录,比如在tb中插入INSERT INTO TB VALUES('VS6622G_H',1) 只需要执行这个update语句:UPDATE ta SET ta.STATUS = tc.Status FROM ta INNER JOIN ( SELECT ta.BomName,ISNULL(t.counter,0) 'Counter','Status' = CASE WHEN ISNULL(t.counter,0) > 2 THEN N'全部' WHEN ISNULL(t.counter,0) <= 0 THEN N'未建' ELSE N'部分' END FROM ta LEFT JOIN ( SELECT ta.BomName, COUNT(ta.BomName) 'counter' FROM ta INNER JOIN TB ON ta.BomName = TB.BomName GROUP BY ta.BomName ) t ON ta.BomName = t.BomName ) tc ON ta.BomName = tc.BomNamecase2) 在tb中插入ta中不存在的记录,比如这条INSERT INTO TB VALUES('VS6623G_H',1) 需要先更新ta表,先在ta中插入:NSERT INTO ta VALUES('VS6623G_H',N'未建') 然后在插入tbINSERT INTO TB VALUES('VS6623G_H',1),最后用update更新下UPDATE ta SET ta.STATUS = tc.Status FROM ta INNER JOIN ( SELECT ta.BomName,ISNULL(t.counter,0) 'Counter','Status' = CASE WHEN ISNULL(t.counter,0) > 2 THEN N'全部' WHEN ISNULL(t.counter,0) <= 0 THEN N'未建' ELSE N'部分' END FROM ta LEFT JOIN ( SELECT ta.BomName, COUNT(ta.BomName) 'counter' FROM ta INNER JOIN TB ON ta.BomName = TB.BomName GROUP BY ta.BomName ) t ON ta.BomName = t.BomName ) tc ON ta.BomName = tc.BomName
(
BomName VARCHAR(32) PRIMARY KEY,
Status NVARCHAR(32)
)
INSERT INTO ta(BomName,Status) VALUES('VS6620G_H',NULL)
INSERT INTO ta(BomName,Status) VALUES('VS6621G_H',NULL)
INSERT INTO ta(BomName,Status) VALUES('VS6622G_H',NULL)
CREATE TABLE tb
(
BomName VARCHAR(32),
BOM_SM_RuleID INT
)ALTER TABLE TB ADD CONSTRAINT FK_BomName FOREIGN KEY(BomName) REFERENCES ta(BomName)INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6620G_H',2)
INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6620G_H',3)
INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6620G_H',1)INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6621G_H',1)
INSERT INTO tb(BomName,BOM_SM_RuleID) VALUES('VS6621G_H',2)UPDATE ta
SET ta.STATUS = tc.Status
FROM ta INNER JOIN
(
SELECT ta.BomName,ISNULL(t.counter,0) 'Counter','Status' = CASE
WHEN ISNULL(t.counter,0) > 2 THEN N'全部'
WHEN ISNULL(t.counter,0) <= 0 THEN N'未建'
ELSE N'部分' END
FROM ta LEFT JOIN (
SELECT ta.BomName, COUNT(ta.BomName) 'counter' FROM ta INNER JOIN TB ON ta.BomName = TB.BomName GROUP BY ta.BomName
) t ON ta.BomName = t.BomName
) tc ON ta.BomName = tc.BomName
如果以后添加了记录,那 ELSE N'部分' 这样写不是会报错吗?
如果以后添加了记录,那 ELSE N'部分' 这样写不是会报错吗?
Case 1 ) 在tb中插入ta中存在的记录,只需要执行Update语句就行
Case 2) 在tb中插入ta中不存在的记录,由于存在外键关系,需要先在ta中加入记录,然后在tb中插入数据,最后更新Update语句。
所以,Case2比Case1多一步操作,需要满足外键引用。
如果以后添加了记录,那 ELSE N'部分' 这样写不是会报错吗?
Case 1 ) 在tb中插入ta中存在的记录,只需要执行Update语句就行
Case 2) 在tb中插入ta中不存在的记录,由于存在外键关系,需要先在ta中加入记录,然后在tb中插入数据,最后更新Update语句。
所以,Case2比Case1多一步操作,需要满足外键引用。不明白啊,能劳驾您再给贴下代码吗?
如果以后添加了记录,那 ELSE N'部分' 这样写不是会报错吗?
Case 1 ) 在tb中插入ta中存在的记录,只需要执行Update语句就行
Case 2) 在tb中插入ta中不存在的记录,由于存在外键关系,需要先在ta中加入记录,然后在tb中插入数据,最后更新Update语句。
所以,Case2比Case1多一步操作,需要满足外键引用。不明白啊,能劳驾您再给贴下代码吗?
case1) 在tb中插入ta中存在的记录,比如在tb中插入INSERT INTO TB VALUES('VS6622G_H',1)
只需要执行这个update语句:UPDATE ta
SET ta.STATUS = tc.Status
FROM ta INNER JOIN
(
SELECT ta.BomName,ISNULL(t.counter,0) 'Counter','Status' = CASE
WHEN ISNULL(t.counter,0) > 2 THEN N'全部'
WHEN ISNULL(t.counter,0) <= 0 THEN N'未建'
ELSE N'部分' END
FROM ta LEFT JOIN (
SELECT ta.BomName, COUNT(ta.BomName) 'counter' FROM ta INNER JOIN TB ON ta.BomName = TB.BomName GROUP BY ta.BomName
) t ON ta.BomName = t.BomName
) tc ON ta.BomName = tc.BomNamecase2) 在tb中插入ta中不存在的记录,比如这条INSERT INTO TB VALUES('VS6623G_H',1)
需要先更新ta表,先在ta中插入:NSERT INTO ta VALUES('VS6623G_H',N'未建')
然后在插入tbINSERT INTO TB VALUES('VS6623G_H',1),最后用update更新下UPDATE ta
SET ta.STATUS = tc.Status
FROM ta INNER JOIN
(
SELECT ta.BomName,ISNULL(t.counter,0) 'Counter','Status' = CASE
WHEN ISNULL(t.counter,0) > 2 THEN N'全部'
WHEN ISNULL(t.counter,0) <= 0 THEN N'未建'
ELSE N'部分' END
FROM ta LEFT JOIN (
SELECT ta.BomName, COUNT(ta.BomName) 'counter' FROM ta INNER JOIN TB ON ta.BomName = TB.BomName GROUP BY ta.BomName
) t ON ta.BomName = t.BomName
) tc ON ta.BomName = tc.BomName
您没明白我的意思,这样写的话,update为“部分”的数据只能是两条记录以内,如果以后ruleID增加了记录(不止1,2,3......),这样写还对吗?
您没明白我的意思,这样写的话,update为“部分”的数据只能是两条记录以内,如果以后ruleID增加了记录(不止1,2,3......),这样写还对吗? 我测试可以,你可以测试下嘛。每次插入数据到表tb,使用Update语句更新下,更新会tb的Status字段,如果某个BomName变成3条,那么status的取值会从‘部分’提升为‘全部’。
您没明白我的意思,这样写的话,update为“部分”的数据只能是两条记录以内,如果以后ruleID增加了记录(不止1,2,3......),这样写还对吗? 我测试可以,你可以测试下嘛。每次插入数据到表tb,使用Update语句更新下,更新会tb的Status字段,如果某个BomName变成3条,那么status的取值会从‘部分’提升为‘全部’。已经解决了,我用distinct获取了一下总数,谢谢您的帮忙!