当前位置: 代码迷 >> Sql Server >> sql union怎么拼起来
  详细解决方案

sql union怎么拼起来

热度:56   发布时间:2016-04-24 09:11:04.0
sql union如何拼起来
DECLARE @Year VARCHAR(4),@Month VARCHAR(2)
SET @Year=2013
SET @Month=1
DECLARE @StartDate DATETIME,@EndDate DATETIME
SET @StartDate=@Year+'-'+@Month+'-01'
SET @EndDate=DATEADD(MONTH,1,@StartDate)
SELECT CAST(a.prd_no as varchar(15)) as 货号,cast(b.name as varchar(30)) as 货品名称,b.ut 单位,
    SUM(CASE WHEN DAY(a.PS_DD)=1 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[1号销售销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=2 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[2号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=3 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[3号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=4 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[4号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=5 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[5号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=6 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[6号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=7 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[7号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=8 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[8号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=9 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[9号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=10 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[10号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=11 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[11号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=12 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[12号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=13 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[13号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=14 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[14号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=15 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[15号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=16 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[16号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=17 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[17号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=18 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[18号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=19 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[19号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=20 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[20号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=21 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[21号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=22 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[22号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=23 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[23号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=24 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[24号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=25 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[25号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=26 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[26号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=27 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[27号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=28 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[28号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=29 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[29号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=30 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[30号销售数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=31 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[31号销售数量]
FROM TF_PSS a,prdt b  
Where a.prd_no=b.prd_no and a.ps_id LIKE 'SA%'
    AND a.PS_DD>=@StartDate AND a.PS_DD<@EndDate
GROUP BY a.prd_no,b.name,b.ut  
Order by a.prd_no
DECLARE @Year VARCHAR(4),@Month VARCHAR(2)
SET @Year=2013
SET @Month=1
DECLARE @StartDate DATETIME,@EndDate DATETIME
SET @StartDate=@Year+'-'+@Month+'-01'
SET @EndDate=DATEADD(MONTH,1,@StartDate)
SELECT CAST(a.prd_no as varchar(15)) as 货号,cast(b.name as varchar(30)) as 货品名称,b.ut 单位,
    SUM(CASE WHEN DAY(a.PS_DD)=1 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[1号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=2 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[2号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=3 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[3号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=4 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[4号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=5 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[5号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=6 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[6号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=7 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[7号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=8 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[8号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=9 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[9号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=10 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[10号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=11 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[11号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=12 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[12号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=13 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[13号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=14 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[14号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=15 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[15号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=16 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[16号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=17 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[17号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=18 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[18号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=19 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[19号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=20 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[20号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=21 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[21号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=22 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[22号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=23 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[23号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=24 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[24号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=25 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[25号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=26 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[26号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=27 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[27号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=28 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[28号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=29 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[29号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=30 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[30号退货数量]
    ,SUM(CASE WHEN DAY(a.PS_DD)=31 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[31号退货数量]
FROM TF_PSS a,prdt b  
Where a.prd_no=b.prd_no and a.ps_id LIKE 'SB%'
    AND a.PS_DD>=@StartDate AND a.PS_DD<@EndDate
GROUP BY a.prd_no,b.name,b.ut  
Order by a.prd_no

如何拼起来然后 一号同时显示进货和退货2种
------解决思路----------------------

-- 这两个SQL前面 都是一样的。
DECLARE?@Year?VARCHAR(4),@Month?VARCHAR(2)
SET?@Year=2013
SET?@Month=1
DECLARE?@StartDate?DATETIME,@EndDate?DATETIME
SET?@StartDate=@Year+'-'+@Month+'-01'
SET?@EndDate=DATEADD(MONTH,1,@StartDate)

-- 直接 union all 就可以了。
select * from t where ...
union all
select * from t where ..... 


------解决思路----------------------
DECLARE @Year VARCHAR(4),@Month VARCHAR(2)
SET @Year=2013
SET @Month=1
DECLARE @StartDate DATETIME,@EndDate DATETIME
SET @StartDate=@Year+'-'+@Month+'-01'
SET @EndDate=DATEADD(MONTH,1,@StartDate)

    SELECT ISNULL(t1.货号,t2.货号) 货号,
           ISNULL(t1.货品名称,t2.货品名称) 货品名称,
           ISNULL(t1.单位,t2.单位) 单位,
           t1.[1号销售销售数量], t2.[1号退货数量],
           -- ...
           t1.[31号销售销售数量], t2.[31号退货数量]
      FROM (/* 第一个SELECT 不要 ORDER BY */) t1
 FULL JOIN (/* 第一个SELECT 不要 ORDER BY */) t2
        ON t1.货号 = t1.货号
  ORDER BY 货号

------解决思路----------------------
不用分开写,也不用写两遍,直接写一起
DECLARE @Year VARCHAR(4),@Month VARCHAR(2)
SET @Year=2013
SET @Month=1
DECLARE @StartDate DATETIME,@EndDate DATETIME
SET @StartDate=@Year+'-'+@Month+'-01'
SET @EndDate=DATEADD(MONTH,1,@StartDate)

SELECT CAST(a.prd_no as varchar(15)) as 货号,cast(b.name as varchar(30)) as 货品名称
,SUM(CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END )[累计数量]
,SUM(CASE WHEN a.ps_id='SA' THEN a.AMT ELSE -a.AMT END )[累计金额]
,SUM(CASE WHEN DAY(a.PS_DD)=1 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[1号销售数量]
,SUM(CASE WHEN DAY(a.PS_DD)=1 THEN (CASE WHEN a.ps_id='SB' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[1号退货数量]
...
,SUM(CASE WHEN DAY(a.PS_DD)=31 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[31号销售数量]
,SUM(CASE WHEN DAY(a.PS_DD)=31 THEN (CASE WHEN a.ps_id='SA' THEN a.qty ELSE -a.qty END ) ELSE 0 END)[31号退货数量]
FROM TF_PSS a,prdt b  Where a.prd_no=b.prd_no and a.ps_id LIKE 'S[AB]'
AND a.PS_DD>=@StartDate AND a.PS_DD<@EndDate
GROUP BY a.prd_no,b.name  Order by a.prd_no