因此,我的任务是每周将数据集导出到 Excel 文件。我正在尝试创建一个视图,以便可以利用 SSIS 导出文件,但是我陷入了困境,因为我没有找到从下面的查询创建视图的方法,因为它使用临时表。任何建议将不胜感激。
请注意,单独运行以下代码可以正常工作并返回所需的正确结果集。就在我尝试将其包装在创建视图中时,它产生了问题。
CREATE VIEW OFRESULTS
AS
CREATE TABLE #t1
(
ID INT IDENTITY(1, 1) Primary Key
,IncNum nvarchar (255)
,ParentIncNum nvarchar (255)
,InAbbr nvarchar (255)
,SpecificInc nvarchar (255)
,CCSection nvarchar (255)
,PCode nvarchar (255)
,IncTime nvarchar (255)
,IncFac nvarchar (255)
,Location nvarchar (255)
,IncDate nvarchar (255)
,Program nvarchar (255)
,Extra nvarchar (255)
,Fac nvarchar (255)
,IncVoid nvarchar (255)
)
INSERT Into #t1 SELECT a.IncNum,
CASE WHEN RIGHT(a.IncNum, 2) like '[a-z][0-9]%' THEN LEFT(a.IncNum,
LEN(a.IncNum) - 2) ELSE a.IncNum END As ParentID, a.IncAbbr,
COALESCE(a.IncSpc, l.IncSpc),
a.IncVio,
a.IncPC,
CONVERT(varchar(8), a.IncTime, 108) as IncTime,
a.IncSite,
a.IncLoc,
CONVERT(varchar(10), a.IncDate, 101) as IncDate,
a.IncProg,
CASE WHEN ex.IncExtCalc = 1 Then 'Controlled'
WHEN ex.IncExtEme = 1 Then 'Immediate'
WHEN ex.IncExtCalc = 1 and ex.IncExtEme = 1 Then 'Controlled and Immediate'
ELSE ' '
END AS [Extr],
CASE WHEN a.IncFa = 1 Then 'Lvl I'
WHEN a.IncFac2 = 1 Then 'Lvl II'
WHEN a.IncFac3 = 1 Then 'Lvl III'
WHEN a.IncFac4 = 1 Then 'Lvl IV'
END AS [FacLevel],
l.IncVoid
FROM [DBSQL].[dbo].[tblA] as a full outer join [DBSQL].[dbo].[tblLog] as l
on a.IncNum = l.IncNum
full outer join [DBSQL].[dbo].[tblEXTR] as ex on a.IncNum = ex.IncNum
WHERE
a.IncDate >= DATEADD(day, -21, Getdate()) and a.IncDate <= DATEADD(day, -7, GetDate()) and l.IncVoid = 0
or
a.IncDate >= DATEADD(day, -21, Getdate()) and a.IncDate <= DATEADD(day, -7, GetDate()) and l.IncVoid is null
SELECT tt.*
FROM #t1 tt
INNER JOIN
(
SELECT ParentIRNum, MAX(ID) AS MaxID
FROM #t1
GROUP BY ParentIRNum
) groupedtt ON tt.ParentIRNum = groupedtt.ParentIRNum AND tt.ID = groupedtt.MaxID
ORDER BY ID
DROP Table #t1
Run Code Online (Sandbox Code Playgroud)
小智 5
我看到这个问题已经得到解答,但我想无论如何我都会添加 10 美分。\n有问题的查询不需要临时表,可以使用 CTE\xe2\x80\x99s 重写,这将使其与查看如下示例:
\n\nCREATE VIEW MyView \nAS\nWITH CTE_T1\nAS\n(\n SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1 AS [Order])) as ID \n ,a.IncNum \n ,(\n CASE \n WHEN RIGHT(a.IncNum, 2) like '[a-z][0-9]%' THEN LEFT(a.IncNum, LEN(a.IncNum) - 2) \n ELSE a.IncNum \n END\n ) AS ParentIncNum\n ,a.IncAbbr AS InAbbr\n ,COALESCE(a.IncSpc, l.IncSpc) AS SpecificInc\n ,a.IncVio AS CCSection\n ,a.IncPC AS PCode\n ,CONVERT(varchar(8), a.IncTime, 108) AS IncTime\n ,a.IncSite AS IncFac\n ,a.IncLoc AS [Location]\n ,CONVERT(varchar(10), a.IncDate, 101) AS IncDate\n ,a.IncProg AS [Program]\n ,(\n CASE WHEN ex.IncExtCalc = 1 Then 'Controlled'\n WHEN ex.IncExtEme = 1 Then 'Immediate'\n WHEN ex.IncExtCalc = 1 and ex.IncExtEme = 1 Then 'Controlled and Immediate'\n ELSE ' '\n END \n ) AS [Extra]\n ,(\n CASE WHEN a.IncFa = 1 Then 'Lvl I'\n WHEN a.IncFac2 = 1 Then 'Lvl II'\n WHEN a.IncFac3 = 1 Then 'Lvl III'\n WHEN a.IncFac4 = 1 Then 'Lvl IV'\n END \n ) AS [Fac]\n ,l.IncVoid AS IncVoid\n FROM [DBSQL].[dbo].[tblA] as a full outer join [DBSQL].[dbo].[tblLog] as l\n on a.IncNum = l.IncNum\n FULL OUTER JOIN [DBSQL].[dbo].[tblEXTR] as ex on a.IncNum = ex.IncNum\n WHERE \n a.IncDate >= DATEADD(day, -21, Getdate()) and a.IncDate <= DATEADD(day, -7, GetDate()) and l.IncVoid = 0\n or\n a.IncDate >= DATEADD(day, -21, Getdate()) and a.IncDate <= DATEADD(day, -7, GetDate()) and l.IncVoid is null\n\n), CTE_GroupedTT\nAS\n(\n SELECT ParentIncNum\n ,MAX(ID) AS MaxID\n FROM CTE_T1\n GROUP BY ParentIncNum\n)\nSELECT TOP 100 PERCENT\n tt.*\nFROM CTE_T1 tt\nINNER JOIN CTE_GroupedTT groupedtt ON tt.ParentIncNum = groupedtt.ParentIncNum AND tt.ID = groupedtt.MaxID\nORDER BY ID\nRun Code Online (Sandbox Code Playgroud)\n\n在上面的示例中,CTE_T1 执行与临时表 #t1 相同的功能。
\n