Sql server 使用sql查询连接两个表
我有两个记录表,一个是Sql server 使用sql查询连接两个表,sql-server,Sql Server,我有两个记录表,一个是temp,第二个是temps, 我想按第二个表中提供的部门更新状态 我需要第一个表计数将更新在第二个表NotYetTaken,WorkInProgress,根据状态完成 比如说,, 将更新护理部门,在Temps表格中有多少已完成、待处理的工作在进行中替换为NULL 临时记录 临时唱片 给出sql查询解决方案 预期产出: 已尝试查询: 您的表结构未规范化 我希望您创建一个具有状态注册表的表,如下所示: CREATE TABLE STATUS (id varchar(36),
temp
,第二个是temps
,
我想按第二个表中提供的部门更新状态
我需要第一个表计数将更新在第二个表NotYetTaken,WorkInProgress,根据状态完成
比如说,,
将更新护理部门,在Temps表格中有多少已完成、待处理的工作在进行中替换为NULL
临时记录
临时唱片
给出sql查询解决方案
预期产出:
已尝试查询:
您的表结构未规范化 我希望您创建一个具有状态注册表的表,如下所示:
CREATE TABLE STATUS
(id varchar(36), description varchar(50))
然后,您在temp
表中引用了status
表上的外键约束
但与此同时,您可以尝试以下方法:
UPDATE temps
SET NOTYETTAKEN =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'NOT YET TAKEN'),
WORKINPROGRESS =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'WORK IN PROGRESS'),
COMPLETED =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'COMPLETED'),
UNDERTESTING =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'UNDER TESTING'),
NOTPOSSIBLE =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'NOT POSSIBLE')
给出您需要的输出格式亲爱的,您的表结构与您的temp和temp样本不同tables@rajeshpanchal:现在我正确地更新了它,但我没有得到结果,我需要这样的输出。@Joe Taras:我只使用临时表。。
NOTYETTAKEN| WORKINPROGRESS |COMPLETED |UNDERTESTING |NOTPOSSIBLE |DEPARTMENT
1 0 0 0 1 ASSEMBLY
18 7 0 4 18 CARE
6 6 6 3 6 CARE(QQ)
2 2 2 2 2 HUMAN RESOURCES
9 0 0 4 9 INFORMATION TECHNOLOGY
0 0 1 0 1 MARKETING
0 9 9 9 0 QUALITY
1 1 1 1 1 RESEARCH
1 0 0 1 1
3 0 3 0 0 SUB CONTRACT
--DROP TABLE #Temp
CREATE TABLE #Temp
(NOTYETTAKEN Int,
WORKINPROGRESS Int,
COMPLETED Int,
UNDERTESTING Int,
NOTPOSSIBLE Int,
STATUSNAME Nvarchar(50),
DEPARTMENTNAME Nvarchar(50),
COUNTS Int)
INSERT INTO #Temp
SELECT 0,0,0,0,0,StatusName,DepartmentName,COUNT(*) AS 'COUNTS'
FROM Test..Task
GROUP BY StatusName,DepartmentName
--DROP TABLE #Temps
CREATE TABLE #Temps
(NOTYETTAKEN Int,
WORKINPROGRESS Int,
COMPLETED Int,
UNDERTESTING Int,
NOTPOSSIBLE Int,
DEPARTMENTNAME Nvarchar(50),
COUNTS Int)
INSERT INTO #Temps(DEPARTMENTNAME)
SELECT DISTINCT DEPARTMENTNAME FROM Test..Task
SELECT * FROM #Temp
SELECT * FROM #Temps
UPDATE a SET
a.NOTYETTAKEN=b.NOTYETTAKEN,
a.WORKINPROGRESS=b.WORKINPROGRESS,
a.COMPLETED=b.COMPLETED,
a.UNDERTESTING=b.UNDERTESTING,
a.NOTPOSSIBLE=b.NOTPOSSIBLE
FROM #Temps a
INNER JOIN #Temp b
ON a.DEPARTMENTNAME=b.DEPARTMENTNAME
CREATE TABLE STATUS
(id varchar(36), description varchar(50))
UPDATE temps
SET NOTYETTAKEN =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'NOT YET TAKEN'),
WORKINPROGRESS =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'WORK IN PROGRESS'),
COMPLETED =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'COMPLETED'),
UNDERTESTING =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'UNDER TESTING'),
NOTPOSSIBLE =
(SELECT [t.COUNT] FROM temp t WHERE T.department = temps.department
AND t.status = 'NOT POSSIBLE')