SQL视图-修改返回的结果
我有点困在这里了。我正在尝试根据条件修改返回的视图。我对SQL相当生疏,对于返回的结果有点困难。这是我写的观点的一部分:SQL视图-修改返回的结果,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有点困在这里了。我正在尝试根据条件修改返回的视图。我对SQL相当生疏,对于返回的结果有点困难。这是我写的观点的一部分: WITH A AS ( SELECT ROW_NUMBER() OVER (PARTITION BY fkidContract,fkidTemplateItem ORDER BY bStdActive DESC, dtdateplanned ASC) AS RANK, tblWorkItems.fkidContract AS ContractNo, .... F
WITH A AS (
SELECT
ROW_NUMBER() OVER (PARTITION BY fkidContract,fkidTemplateItem ORDER BY bStdActive DESC, dtdateplanned ASC) AS RANK,
tblWorkItems.fkidContract AS ContractNo,
....
FROM tblWorkItems
WHERE fkidTemplateItem IN
(2895,2905,2915,2907,2908,
2909,3047,2930,2923,2969,
2968,2919,2935,2936,2927,
2970,2979)
AND ...
)
SELECT * FROM A WHERE RANK = 1
返回结果类似于以下内容:
ContractNo| ItemNumber | Planned | Complete
001 | 100 | 01/01/1900 | 02/01/1900
001 | 101 | 03/04/1900 | 02/01/1901
001 | 102 | 03/06/1901 | 02/08/1900
002 | 100 | 01/03/1911 | 02/08/1913
UPDATE A
SET A.Completed = ( SELECT R.Completed
FROM myTable R
INNER JOIN A
ON A.ContractNo = R.ContractNo
WHERE A.ItemNumber = 100 AND R.ItemNumber = 101
)
这给了我预期的结果,但是由于一个噩梦水晶报告,我需要稍微改变这个视图。我希望获取此返回的结果集,并使用从同一表和同一契约关系中提取的值修改现有列,如下所示:
ContractNo| ItemNumber | Planned | Complete
001 | 100 | 01/01/1900 | 02/01/1900
001 | 101 | 03/04/1900 | 02/01/1901
001 | 102 | 03/06/1901 | 02/08/1900
002 | 100 | 01/03/1911 | 02/08/1913
UPDATE A
SET A.Completed = ( SELECT R.Completed
FROM myTable R
INNER JOIN A
ON A.ContractNo = R.ContractNo
WHERE A.ItemNumber = 100 AND R.ItemNumber = 101
)
我想做的是修改一个任务的完成日期,如果它们都共享相同的ContractNo字段值,则将其设置为另一个任务的完成日期。我不确定A和R之间的ItemNumber关系可能只是为了测试…,但似乎您真的不想更新任何内容,但在某些情况下,您需要使用不同的值。因此,您可能只想将查询的非cte部分更改为:
SELECT A.ContractNo, A.ItemNumber, A.Planned,
COALESCE(R.Completed,A.Completed) as Completed
FROM A
LEFT OUTER JOIN myTable R
ON A.ContractNo = R.ContractNo
AND A.ItemNumber = 100 AND R.ItemNumber = 101 -- I'm not sure about this part
WHERE A.Rank = 1
因此,事实证明,实际阅读这些信息有助于: 作为参考,total查询对大约500万条记录进行了三次内部联接,这个case语句的性能令人惊讶
我建议把它作为一个整体关闭 如果您使用关键字with,那么您对sql不是绿色的。问题的关键是sql关键字大小写。您使用它来修改查询,而不是随后更改结果。您仅使用CTE表达式拉入2列,但您发布的结果显示4列。在你的例子中有没有被删掉的代码?劳埃德,有很多。我发布了我认为相关的部分。如果你愿意,我可以发布整个视图@DanBracuk-case关键字是不正确的复制+粘贴+修改。我已将其删除并更新。myTable与A是同一个表还是两个不同的表?您不应该真正更改数据以满足报告要求!如果数据在那里,那么您应该更改查询。