我有两个表,一个包含项目列表,另一个包含此项目的请求。我想获得项目编号和请求记录。状态可以是:红色,黄色,绿色,打开如何根据此记录的值在一对多关系中获取单个记录
如何确保显示的1状态记录遵循以下逻辑:有红色时显示红色,当没有红色时但有一个黄色的节目这个黄色的等等...
;WITH
numberTest as(
SELECT dbo.ServiceRequest.ID as numId,
ROW_NUMBER() OVER (PARTITION BY dbo.ServiceRequest.Project_ID order by Project_ID) AS RN1
FROM dbo.ServiceRequest
),
CTEVrequest AS
(
SELECT dbo.ServiceRequest.ID, dbo.ServiceRequest.Project_ID
FROM dbo.ServiceRequest
LEFT JOIN numberTest ON numberTest.numId = dbo.ServiceRequest.ID
WHERE numberTest.RN1 = 1
AND
dbo.ServiceRequest.ID = CASE
WHEN EXISTS(
select srvReq.ID
from dbo.ServiceRequest as srvReq
where requestStatus.ServiceStatus = 'R' AND srvReq.Project_ID = dbo.ServiceRequest.Project_ID)
THEN (select srvReq.ID
from dbo.ServiceRequest as srvReq
where requestStatus.ServiceStatus = 'R' AND srvReq.Project_ID = dbo.ServiceRequest.Project_ID)
WHEN EXISTS(
select srvReq.ID
from dbo.ServiceRequest as srvReq
where requestStatus.ServiceStatus = 'Y' AND srvReq.Project_ID = dbo.ServiceRequest.Project_ID)
THEN (select srvReq.ID
from dbo.ServiceRequest as srvReq
where requestStatus.ServiceStatus = 'Y' AND srvReq.Project_ID = dbo.ServiceRequest.Project_ID)
END)
SELECT DISTINCT
dbo.Project.ProjectNumber,
dbo.Project.ID,
CTEVrequest.ServiceReqStatus,
CTEVrequest.ServiceStatus
FROM dbo.Project
LEFT JOIN CTEVrequest ON CTEVrequest.Project_ID = dbo.Project.ID
LEFT JOIN dbo.Project ON dbo.ServiceRequest.Project_ID = dbo.Project.ID
的问题是我得到的“子查询返回多个值”错误,我不知道如何让检查的结果,如果有存在红色的记录,如果没有选择黄色的记录等等。
这里是一个开始的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
其他人可能无法理解/读取总代码,所以最好的方法是阅读链接张贴上面sean – TheGameiswar
进一步,一个地方,你可以看到额外的列是(选择srvReq.ID ...添加选择顶部1 srvReq.ID可以工作,但它不会给你你需要的结果 – TheGameiswar