Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用sql查询连接两个表_Sql Server - Fatal编程技术网

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')