34,590
社区成员
发帖
与我相关
我的任务
分享
SELECT a.etprs_id,
a.monthcode,
isnull(b.amount,0) as amount
FROM(
SELECT distinct a.etprs_id,b.monthcode
FROM #t1 a
,#T2 b
) a
LEFT JOIN #t1 b
ON (a.etprs_id = b.etprs_id
AND a.monthcode = b.monthcode)
create table #企业销量表(etprs_id varchar(50),monthcode varchar(50),amount int)
insert into #企业销量表 select '企业1','200801',1
insert into #企业销量表 select '企业1','200802',1
insert into #企业销量表 select '企业2','200802',6
create table #月份表(monthcode varchar(50))
insert into #月份表 select '200801'
insert into #月份表 select '200802'
insert into #月份表 select '200803'
select A.etprs_id,B.monthcode,isnull(C.amount,0) amount
from
(select distinct etprs_id from #企业销量表) A
cross join #月份表 B
left outer join #企业销量表 C
on A.etprs_id=C.etprs_id
and B.MonthCode=C.MonthCode
order by A.etprs_id,B.monthcode
create table t1(etprs_id varchar(50),monthcode varchar(50),amount int)
insert into t1 select '企业1','200801',1
insert into t1 select '企业1','200802',1
insert into t1 select '企业2','200802',6
GO
create table t2(monthcode varchar(50))
insert into t2 select '200801'
insert into t2 select '200802'
insert into t2 select '200803'
GO
SELECT id,mc,ISNULL(amount,0) FROM
(SELECT DISTINCT a.etprs_id id,b.monthcode mc
FROM t1 a
CROSS JOIN t2 b) d
LEFT JOIN t1 c
ON mc=monthcode AND id=etprs_id
GO
DROP TABLE t1,t2
GO
select A.etprs_id,B.MontheCode,isnull(C.amount,0) amount
from
(select distinct etprs_id from 企业销量表) A
cross join 月份表 B
left outer join 企业销量表 C
on A.etprs_id=C.etprs_id
and B.MonthCode=C.MonthCode
order by A.etprs_id,B.MontheCode
set nocount on
if object_id('tempdb.dbo.#yearmonth') is not null drop table #yearmonth
if object_id('tempdb.dbo.#sells') is not null drop table #sells
create table #yearmonth (monthcode int)
insert into #yearmonth values(200801)
insert into #yearmonth values(200802)
insert into #yearmonth values(200803)
create table #sells (etprs_id Nvarchar(100),monthcode int,amount int)
insert into #sells select '企业1',200801,1
union all select '企业1',200802,1
union all select '企业2',200802,6
go
select b.etprs_id,b.monthcode,isnull(a.amount,0) as amount
from #sells a right join
(select * from #yearmonth , (select distinct etprs_id from #sells) x) b
on a.monthcode=b.monthcode
and a.etprs_id=b.etprs_id
go
drop table #yearmonth,#sells
/*
企业1,200801,1
企业1,200802,1
企业1,200803,0
企业2,200801,0
企业2,200802,6
企业2,200803,0
*/
--> 测试数据: @企业销量表
declare @企业销量表 table (etprs_id varchar(5),monthcode int,amount int)
insert into @企业销量表
select '企业1',200801,1 union all
select '企业1',200802,1 union all
select '企业2',200802,6
--> 测试数据: @月份表
declare @月份表 table (monthcode int)
insert into @月份表
select 200801 union all
select 200802 union all
select 200803
select distinct etprs_id,b.monthcode,
amount=isnull((select amount from @企业销量表 where etprs_id=a.etprs_id and monthcode=b.monthcode),0)
from @企业销量表 a,@月份表 b
-->生成测试数据
declare @enterprise table([etprs_id] nvarchar(3),[monthcode] nvarchar(10),[amount] int)
Insert @enterprise
select N'企业1','200801',1 union all
select N'企业1','200802',1 union all
select N'企业2','200802',6
--Select * from @enterprise
declare @month table([monthcode] nvarchar(10))
Insert @month
select '200801' union all
select '200802' union all
select '200803'
--Select * from @month
select a.[etprs_id],m.[monthcode], isnull(e.[amount],0) as [amount] from (select distinct [etprs_id] from @enterprise)a
left join @month m on 1=1
left join @enterprise e on e.[monthcode] = m.[monthcode] and a.[etprs_id] = e.[etprs_id]
/*
etprs_id monthcode amount
-------- ---------- -----------
企业1 200801 1
企业1 200802 1
企业1 200803 0
企业2 200801 0
企业2 200802 6
企业2 200803 0
*/
create table 企业销量表(etprs_id varchar(50),monthcode varchar(50),amount int)
insert into 企业销量表 select '企业1','200801',1
insert into 企业销量表 select '企业1','200802',1
insert into 企业销量表 select '企业2','200802',6
create table 月份表(monthcode varchar(50))
insert into 月份表 select '200801'
insert into 月份表 select '200802'
insert into 月份表 select '200803'
select a.etprs_id,a.monthcode,isnull( amount,0) from (
select distinct a.etprs_id,b.monthcode from 企业销量表 a ,月份表 b)a
left join 企业销量表 b
on a.etprs_id=b.etprs_id and a.monthcode=b.monthcode
--> 测试数据: #T1
if object_id('tempdb.dbo.#T1') is not null drop table #T1
create table #T1 (etprs_id nvarchar(5),monthcode int,amount int)
insert into #T1
select '企业1',200801,1 union all
select '企业1',200802,1 union all
select '企业2',200802,6
--> 测试数据: #T2
if object_id('tempdb.dbo.#T2') is not null drop table #T2
create table #T2 (monthcode int)
insert into #T2
select 200801 union all
select 200802 union all
select 200803
;
with cte as
(
select *
from (select distinct etprs_id from #T1) a
cross join #T2 b
)
select a.*,isnull(b.amount,0) amount
from cte a
left join #T1 b
on a.monthcode=b.monthcode and a.etprs_id=b.etprs_id
/*
etprs_id monthcode amount
-------- ----------- -----------
企业1 200801 1
企业1 200802 1
企业1 200803 0
企业2 200801 0
企业2 200802 6
企业2 200803 0
(6 行受影响)
*/