将SQL查询会话转换为视图

问题描述

我有以下查询,需要将其转换为sql Server中的视图。该视图将连接到Excel中的表。我已经阅读了Views,但是所有示例都使用一个简单的SQL查询。有人可以给我一些有关如何将此代码转换为View的指导吗?我们将不胜感激(但不是必需的)一些有关正在发生的事情的注释,这些注释可以帮助我进一步了解“视图”。预先感谢。

--Selecting highest result_value for PCE in a specific quarter

DECLARE @SelectQuarter AS VARCHAR(6);
SET @SelectQuarter = (CAST(year(getdate()) AS char(4)) + 'Q' + 
    CAST(CEILING(CAST(month(getdate())-4 AS decimal(4,2)) / 3) AS char(1)));
print @SelectQuarter;

WITH
  q AS
(
SELECT TOP 100 PERCENT GMP.GMP_Sample_Events.sys_loc_code,GMP.GMP_Sample_Events.sample_date,GMP.GMP_Sample_Events.sample_event,GMP.GMP_Sample_Results.chemical_name,GMP.GMP_Sample_Results.result_value,GMP.GMP_Sample_Results.detect,GMP.GMP_Sample_Results.reporting_limit,GMP.GMP_Sample_Results.dilution,GMP.GMP_Sample_Results.edd_no

FROM GMP.GMP_Sample_Events INNER JOIN
     GMP.GMP_Sample_Results ON GMP.GMP_Sample_Events.sys_sample_code = 
     GMP.GMP_Sample_Results.sys_sample_code
WHERE ((GMP.GMP_Sample_Results.chemical_name = N'Tetrachloroethene') AND 
     (GMP.GMP_Sample_Events.sample_event = @SelectQuarter))
),SEQUENCED AS  
(
    SELECT ROW_NUMBER() OVER (PARTITION BY sys_loc_code ORDER BY 
        chemical_name,sys_loc_code,result_value desc) AS sequence_id,*
    FROM q
)

SELECT  sys_loc_code,sample_date,sample_event,chemical_name,result_value,detect,reporting_limit,dilution,edd_no
INTO #PCE1
FROM  SEQUENCED
WHERE sequence_id = 1
;

--Selecting most recent sample_date for PCE in a specific quarter

SELECT  TOP 100 PERCENT  GMP.GMP_Sample_Events.sys_loc_code,GMP.GMP_Sample_Results.edd_no
INTO #PCE2
FROM GMP.GMP_Sample_Events INNER JOIN
     GMP.GMP_Sample_Results ON GMP.GMP_Sample_Events.sys_sample_code = 
     GMP.GMP_Sample_Results.sys_sample_code
WHERE (GMP.GMP_Sample_Events.sample_date>= DATEADD(MONTH,-13,CAST(GETDATE() AS DATE)))  
      AND (GMP.GMP_Sample_Results.chemical_name = N'Tetrachloroethene')
      AND (sample_event <> @SelectQuarter OR sample_event IS NULL) 
;

--Concatenate the two files together

SELECT x.* INTO #PCE3 
FROM
    (
    SELECT * FROM #PCE1
    UNION 
    SELECT * FROM #PCE2
    ) x
;

-- Find the most recent date for each sys_loc_code and return its row

WITH
  q AS
(
SELECT  *
FROM    #PCE3  
),SEQUENCED AS  
(
    SELECT ROW_NUMBER() OVER (PARTITION BY sys_loc_code 
    ORDER BY  sys_loc_code,sample_date desc) AS sequence_id,*
    FROM  q
)
SELECT  sys_loc_code,edd_no
INTO    #PCE_Final
FROM    SEQUENCED
WHERE   sequence_id = 1

-- Save into final temp file
SELECT      * 
FROM        #PCE_Final
ORDER BY    sys_loc_code

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)