Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 Server_Tsql - Fatal编程技术网

Sql server 无法使用临时表创建视图

Sql server 无法使用临时表创建视图,sql-server,tsql,Sql Server,Tsql,希望你能帮忙 我意识到,在SQL视图中不能有临时表,所以转换下面的查询以便在SQL视图中使用它的最佳方法是什么 提前谢谢 SELECT a.KeyField, a.AlphaValue AS Compostable INTO #DAT FROM [SysproCompanyA].[dbo].AdmFormData a WHERE a.FieldName = 'DAT001' SELECT b.KeyField, b.AlphaValue AS

希望你能帮忙

我意识到,在SQL视图中不能有临时表,所以转换下面的查询以便在SQL视图中使用它的最佳方法是什么

提前谢谢

SELECT 
    a.KeyField, a.AlphaValue AS Compostable 
INTO 
    #DAT
FROM 
    [SysproCompanyA].[dbo].AdmFormData a
WHERE 
    a.FieldName = 'DAT001'

SELECT 
    b.KeyField, b.AlphaValue AS Trial 
INTO 
    #PAS
FROM 
    [SysproCompanyA].[dbo].AdmFormData b
WHERE 
    b.FieldName = 'PAS001'

SELECT 
    c.KeyField AS JobNumber, c.Compostable, d.Trial
FROM 
    #DAT c 
INNER JOIN 
    #PAS d ON c.KeyField = d.KeyField
WHERE 
    c.KeyField = '00170579'

DROP TABLE #DAT
DROP TABLE #PAS
使用CTE的

WITH [DAT] as (
    SELECT a.KeyField, a.AlphaValue AS Compostable 
    FROM [SysproCompanyA].[dbo].AdmFormData a
    WHERE a.FieldName = 'DAT001'
), [PAS] as (
    SELECT b.KeyField, b.AlphaValue AS Trial
    FROM [SysproCompanyA].[dbo].AdmFormData b
    WHERE b.FieldName = 'PAS001'
)
SELECT c.KeyField AS JobNumber, c.Compostable, d.Trial
FROM [DAT] c 
INNER JOIN [PAS] d ON c.KeyField = d.KeyField
WHERE c.KeyField = '00170579'
使用CTE

create view MyView
as
with DAT as
(
  SELECT a.KeyField, a.AlphaValue AS Compostable
  FROM [SysproCompanyA].[dbo].AdmFormData a
  WHERE a.FieldName = 'DAT001'
)
, PAS as
( 
  SELECT b.KeyField, b.AlphaValue AS Trial
  FROM [SysproCompanyA].[dbo].AdmFormData b
  WHERE b.FieldName = 'PAS001'
)
  SELECT c.KeyField AS JobNumber, c.Compostable, d.Trial
  FROM DAT c INNER JOIN PAS d ON c.KeyField = d.KeyField
  WHERE c.KeyField = '00170579'

也许我们可以使用相同的限制将两个表连接在一起,然后选择所需的列:

SELECT
    c.KeyField AS JobNumber,
    c.Compostable,
    d.Trial
FROM [SysproCompanyA].[dbo].AdmFormData c
INNER JOIN [SysproCompanyA].[dbo].AdmFormData d
    ON c.KeyField = d.KeyField
WHERE
    c.FieldName = 'DAT001' AND
    d.FieldName = 'PAS001' AND
    c.KeyField = '00170579'

查一下CTE,常用的表格表达式。你的答案更好。我只是回答问题。你解决了问题;)@JuanCarlosOropeza不,你是对的,你应该小心谨慎,尽量坚持原始查询。有可能是另一个问题,一个简单的连接不会取代OP所拥有的。