need help in sql temp table

Farhan Jamil 421 Reputation points
2021-05-19T14:06:32.727+00:00

Hi

What I am trying to do is create two separate temp table to achieve pivotting from two separate CTEs. I am unable to do it. Please can someone guide me on how to move forward

My Code

;with AML
as
(
select
case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6) else PRODUCT_CODE end as [Product Code],
sum(f.SALE_TOT_QTY) as UnitsSold,
'AMLStoresYTD' as SalesBD
from dbo.AGG_MLY_STR_PROD f with(nolock)
where f.STORE_CODE =0000 and f.DATE_KEY > (select min(date_key) from dim_date where year = (select d.YEAR from dim_date d where d.DATE_FLD = cast(getdate()-1 as date))) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6) else PRODUCT_CODE end

union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'AMLStoresWTD' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE =1111 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'AMLLW' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE =2222 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY-7 from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'AMLLW2' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE =3333 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY-14 from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

    union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'AMLLW3' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE =4444 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY-21 from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'AMLLW4' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE =5555 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY-28 from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

),adw as
(
select
case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6) else PRODUCT_CODE end as [Product Code],
sum(f.SALE_TOT_QTY) as UnitsSold,
'ADWYTD' as SalesBD
from dbo.AGG_MLY_STR_PROD f with(nolock)
where f.STORE_CODE=12 and f.DATE_KEY > (select min(date_key) from dim_date where year = (select d.YEAR from dim_date d where d.DATE_FLD = cast(getdate()-1 as date))) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6) else PRODUCT_CODE end

union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'ADWWTD' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE=13 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'ADWLW' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE=14 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY-7 from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'ADWLW2' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE=15 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY-14 from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

    union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'ADWLW3' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE=16 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY-21 from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

union all

select
    case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end as [Product Code],
    sum(f.SALE_TOT_QTY) as UnitsSold,
    'ADWLW4' as SalesBD 
from dbo.AGG_WLY_STR_PROD f with(nolock)
where f.STORE_CODE=17 and f.DATE_KEY = (select d.WEEK_END_DATE_KEY-28 from dim_date d where d.DATE_FLD = cast(getdate()-1 as date)) and f.SALE_TOT_QTY <> 0
group by case when len(PRODUCT_CODE) < 6 then right('000000'+product_code,6)  else PRODUCT_CODE end

)

select [product code],cast(isnull([AMLStoresYTD],0) as int) as [AMLStoresYTD]
,cast(isnull([AMLStoresWTD],0) as int) as [AMLStoresWTD]
,cast(isnull([AMLStoresLW],0) as int) as [AMLStoresLW]
,cast(isnull([AMLStoresLW2],0) as int) as [AMLStoresLW2]
,cast(isnull([AMLStoresLW3],0) as int) as [AMLStoresLW3]
,cast(isnull([AMLStoresLW4],0) as int) as [AMLStoresLW4]
into #AML
from
(
select [product code],
UnitsSold,
SalesBD
from AML
--group by [Product Code],SalesBD
)as pt
pivot(max(unitssold)
for SalesBD in([AMLStoresYTD],[AMLStoresWTD],[AMLStoresLW],[AMLStoresLW2],[AMLStoresLW3],[AMLStoresLW4]))pivottable

union all

select [product code],cast(isnull([ADWYTD],0) as int) as [ADWYTD]
,cast(isnull([ADWWTD],0) as int) as [ADWWTD]
,cast(isnull([ADWLW],0) as int) as [ADWLW]
,cast(isnull([ADWLW2],0) as int) as [ADWLW2]
,cast(isnull([ADWLW3],0) as int) as [ADWLW3]
,cast(isnull([ADWLW4],0) as int) as [ADWLW4]
into #ADW
from
(
select [product code],
UnitsSold,
SalesBD
from adw
--group by [Product Code],SalesBD
)as pt
pivot(max(unitssold)
for SalesBD in([ADWYTD],[ADWWTD],[ADWLW],[ADWLW2],[ADWLW3],[ADWLW4]))pivottab

select * from #aml
select * from #adw

I am not sure whether i can create two separate temp table or not.
This is just a part of my code . If this approach works then i have 5 more to add .

Any advise can help

Regards
Farhan Jamil

Developer technologies | Transact-SQL
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. Guoxiong 8,206 Reputation points
    2021-05-19T16:07:38.51+00:00

    Replace the CTEs with the table variables @primax and @awwea and then you can use SELECT ... INTO #AML and SELECT ... INTO #AWD. Finally you can UNION both temp tables for your outputs.


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.