Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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视图-修改返回的结果_Sql_Sql Server 2008_Tsql - Fatal编程技术网

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

我有点困在这里了。我正在尝试根据条件修改返回的视图。我对SQL相当生疏,对于返回的结果有点困难。这是我写的观点的一部分:

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是同一个表还是两个不同的表?您不应该真正更改数据以满足报告要求!如果数据在那里,那么您应该更改查询。