簡體   English   中英

如何在 SQL 中創建第二個臨時表

[英]How to create a 2nd temp table in SQL

我有這樣的情況。 我基本上需要將我的整個代碼放入第二個臨時表(?),以便能夠從中獲取 select。 里面的代碼工作得很好我只是不明白如何基本上創建一個更大的臨時表來吸收第一個和以前的 select 和以后允許 select 一次。

這就是我現在所擁有的

WITH t AS 
(       Select
        p.[PDITM#], l.SGDWHS, p.PDCHN, p.PDWEDT, Sum(p.PDQSLD) AS 'Sum', 
        case when p.PDCHN = 'DH' then p.PDQSLD else 0 end as DHSLD,
        case when p.PDCHN = 'WM' then p.PDQSLD else 0 end as WMSLD,
        case when p.PDCHN = 'MJ' then p.PDQSLD else 0 end as MJSLD,
        case when p.PDCHN = 'BJ' then p.PDQSLD else 0 end as BJSLD
        FROM  [Repit].[LEVYDTA].[POSDTLM] p
  LEFT OUTER JOIN [Repit].[LEVYDTA].[LDSSGEN] l 

  ON p.[PDAGY]=l.[SGAGY] AND p.[PDCHN] = l.[SGCHN] AND p.[PDSTR] = l.[SGSTR]


  WHERE p.[PDQSLD] > 0 AND p.[PDAGY] != 15
  AND l.[SGDWHS] IN (01, 21, 30, 40, 02) 

  AND CONVERT(DATE, CONVERT(CHAR(8), p.PDWEDT ))  = cast(DATEADD(dd, DATEPART(DW,GETDATE())*-1, GETDATE()) as date)

  GROUP BY p.[PDITM#], l.[SGDWHS], p.[PDCHN], p.[PDWEDT], p.[PDQSLD]

)
select  t.[PDITM#] as [PDITM#],
        t.SGDWHS as [SGDWHS],
        SUM(t.Sum) as [PDQSLD],
        SUM(t.DHSLD) AS [DHSLD],
        SUM(t.WMSLD) AS [WMSLD],
        SUM(t.MJSLD) AS [MJSLD],
        SUM(t.BJSLD) AS [BJSLD],
        SUM(t.Sum) - (SUM(t.DHSLD) + SUM(t.WMSLD) +  SUM(t.MJSLD) + SUM(t.BJSLD)) as OTHRSLD
            from t
GROUP BY t.PDITM#, t.SGDWHS 
ORDER BY t.PDITM#, t.SGDWHS

我需要上表中的 select 這樣的字段

SELECT t.PDITM#, t.SGDWHS, 
CAST((t.DHSLD/t.Sum) * 100 as DECIMAL (18,2)) AS 'DHPCT',
CAST((t.WMSLD/t.Sum) * 100 as DECIMAL (18,2)) AS 'WMPCT',
CAST((t.MJSLD/t.Sum) * 100 as DECIMAL (18,2)) AS 'MJPCT',
CAST((t.BJSLD/t.Sum) * 100 as DECIMAL (18,2)) AS 'BJPCT',
CAST(((t.Sum - ( t.DHSLD + t.WMSLD +  t.MJSLD + t.BJSLD))/t.Sum) * 100 as DECIMAL (18,2)) AS 'OTHRPCT'
FROM second temp table

如果有人能讓我知道這怎么可能,我將不勝感激。 我花了一些時間試圖自己弄清楚,但是當您需要制作多個臨時表並選擇它們時,沒有太多信息。

如果您使用的是 MSSQL,這可能是您想要做的嗎?

-- Drop temp table if already present
DROP TABLE IF EXISTS #temp_main

SELECT
    p.[PDITM#]
,   l.SGDWHS
,   p.PDCHN
,   p.PDWEDT
,   SUM(p.PDQSLD) AS [Sum_PDQSLD]
,   case when p.PDCHN = 'DH' then p.PDQSLD else 0 end as [DHSLD]
,   case when p.PDCHN = 'WM' then p.PDQSLD else 0 end as [WMSLD]
,   case when p.PDCHN = 'MJ' then p.PDQSLD else 0 end as [MJSLD]
,   case when p.PDCHN = 'BJ' then p.PDQSLD else 0 end as [BJSLD]

-- Select data into temp table.
INTO #temp_main

FROM [Repit].[LEVYDTA].[POSDTLM] AS p
LEFT JOIN [Repit].[LEVYDTA].[LDSSGEN] AS l 
ON p.[PDAGY]=l.[SGAGY] AND p.[PDCHN] = l.[SGCHN] AND p.[PDSTR] = l.[SGSTR]
WHERE p.[PDQSLD] > 0 AND p.[PDAGY] != 15 AND l.[SGDWHS] IN (01, 21, 30, 40, 02) 
AND CONVERT(DATE, CONVERT(CHAR(8), p.PDWEDT)) = cast(DATEADD(dd, DATEPART(DW,GETDATE())*-1, GETDATE()) as date)
GROUP BY 
    p.[PDITM#]
,   l.[SGDWHS]
,   p.[PDCHN]
,   p.[PDWEDT]
,   p.[PDQSLD]

-- Table 1
SELECT 
        t.[PDITM#]
    ,   t.SGDWHS
    ,   SUM(t.Sum_PDQSLD) as [PDQSLD]
    ,   SUM(t.DHSLD) AS [DHSLD]
    ,   SUM(t.WMSLD) AS [WMSLD]
    ,   SUM(t.MJSLD) AS [MJSLD]
    ,   SUM(t.BJSLD) AS [BJSLD]
    ,   SUM(t.Sum_PDQSLD) - (SUM(t.DHSLD) + SUM(t.WMSLD) +  SUM(t.MJSLD) + SUM(t.BJSLD)) as [OTHRSLD]
from #temp_main AS t -- Temp table
GROUP BY t.[PDITM#], t.SGDWHS
ORDER BY t.[PDITM#], t.SGDWHS

-- Table 2
SELECT 
        t.[PDITM#]
    ,   t.SGDWHS 
    ,   CAST((t.DHSLD/t2.Sum_PDQSLD) * 100 as DECIMAL (18,2)) AS [DHPCT]
    ,   CAST((t.WMSLD/t.Sum_PDQSLD) * 100 as DECIMAL (18,2)) AS [WMPCT]
    ,   CAST((t.MJSLD/t.Sum_PDQSLD) * 100 as DECIMAL (18,2)) AS [MJPCT]
    ,   CAST((t.BJSLD/t.Sum_PDQSLD) * 100 as DECIMAL (18,2)) AS [BJPCT]
    ,   CAST(((t.Sum_PDQSLD - (t.DHSLD + t.WMSLD +  t.MJSLD + t.BJSLD))/t.Sum_PDQSLD) * 100 as DECIMAL (18,2)) AS [OTHRPCT]
FROM #temp_main AS t -- Temp table
ORDER BY t.[PDITM#], t.SGDWHS

-- Drop table once complete.
DROP TABLE #table_main

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM