22,302
社区成员




CREATE PROCEDURE dbo.GetStallCostStartData
@CostItem nVARCHAR(400),
@BlockID nVARCHAR(400)
AS
BEGIN
SET NOCOUNT ON
SELECT @BlockID =''''+replace(@BlockID , ',' , ''',''')+''''
@CostItem=''''+replace(@CostItem , ',' , ''',''')+''''
EXEC('SELECT * FROM dbo.Stall WHERE 区块 in('+@BlockID+') and 费用类型 in('+@CostItem+')')
END
GO
CREATE TABLE #TAB(房号 varchar(4),面积 float, 区块 varchar(10))
insert into #tab values('A001',8.0,'A区')
insert into #tab values('A002',10.0,'A区')
insert into #tab values('A001',10.0,'B区')
insert into #tab values('B001',8.0,'B区')
i
create PROCEDURE dbo.GetStallCostStartData
(
@CostItem nVARCHAR(200),
@BlockID nVARCHAR(200)
)
as
BEGIn
create table #t (CostItem varchar(10))
declare @sql varchar(1000)
select @sql=replace(@CostItem,',',''' union all select ''')
exec('insert into #t select '''+@sql+'''')
select a.*,b.*,金额=0 from #tab a ,#t b where charindex(','+a.区块+',',','+@BlockID+',')>0
drop table #t
end
exec GetStallCostStartData '物业管理费,空调费','A区,B区'
房号 面积 区块 CostItem 金额
---- ---------------------- ---------- ---------- -----------
A001 8 A区 物业管理费 0
A001 8 A区 空调费 0
A002 10 A区 物业管理费 0
A002 10 A区 空调费 0
A001 10 B区 物业管理费 0
A001 10 B区 空调费 0
B001 8 B区 物业管理费 0
B001 8 B区 空调费 0
B002 10 B区 物业管理费 0
B002 10 B区 空调费 0
(10 行受影响)
--建立测试表
create table Stall
(
房号 varchar(4),
面积 int,
区块 varchar(10)
)
insert into Stall select 'A001', 8.0 , 'A区'
insert into Stall select 'A002', 10.0, 'A区'
insert into Stall select 'B001', 8.0 , 'B区'
insert into Stall select 'B002', 10.0 , 'B区'
--建立辅助表
create table tab
(
CoseItem nvarchar(20)
)
--语句(楼主把变量改成参数就可以了)
declare @CostItem nVARCHAR(200)
declare @BlockID nVARCHAR(200)
select @CostItem = '物业管理费,空调费,电费',@BlockID = 'A区,B区,C区'
select @CostItem = 'insert into tab select '''+replace(@CostItem,',',''' union all select ''') + ''''
exec(@CostItem)
select a.房号,a.面积,a.区块,b.CoseItem as 费用类型,0 as 金额
from Stall a ,tab b
where @BlockID like '%'+a.区块+'%'
--结果
(所影响的行数为 3 行)
房号 面积 区块 费用类型 金额
---- ----------- ---------- -------------------- -----------
A001 8 A区 物业管理费 0
A001 8 A区 空调费 0
A001 8 A区 电费 0
A001 8 A区 物业管理费 0
A001 8 A区 空调费 0
A001 8 A区 电费 0
A002 10 A区 物业管理费 0
A002 10 A区 空调费 0
A002 10 A区 电费 0
A002 10 A区 物业管理费 0
A002 10 A区 空调费 0
A002 10 A区 电费 0
B001 8 B区 物业管理费 0
B001 8 B区 空调费 0
B001 8 B区 电费 0
B001 8 B区 物业管理费 0
B001 8 B区 空调费 0
B001 8 B区 电费 0
B002 10 B区 物业管理费 0
B002 10 B区 空调费 0
B002 10 B区 电费 0
B002 10 B区 物业管理费 0
B002 10 B区 空调费 0
B002 10 B区 电费 0
(所影响的行数为 24 行)
--删除辅助表数据
truncate table tab
CREATE TABLE Stall(房号 varchar(10),面积 int,区块 varchar(10))
INSERT INTO Stall VALUES('A001', 8,'A区')
INSERT INTO Stall VALUES('A001', 8,'B区')
INSERT INTO Stall VALUES('A002',10,'A区')
INSERT INTO Stall VALUES('A002',10,'B区')
INSERT INTO Stall VALUES('A003',12,'A区')
INSERT INTO Stall VALUES('A003',12,'B区')
GO
CREATE PROCEDURE dbo.GetStallCostStartData
@CostItem nVARCHAR(400),
@BlockID nVARCHAR(400)
AS
BEGIN
SET NOCOUNT ON
DECLARE @SQL NVARCHAR(4000)
SELECT @BlockID =''''+REPLACE(@BlockID , ',' , ''',''')+'''',
@CostItem=@CostItem + ',',@SQL=''
WHILE charindex(',',@CostItem)>0
BEGIN
SELECT @SQL=@SQL+' UNION ALL SELECT 房号,面积,区块,'''
+LEFT(@CostItem,charindex(',',@CostItem)-1)
+''' as 费用类型,0 as 金额 FROM dbo.Stall WHERE 区块 in('+@BlockID+')',
@CostItem=stuff(@CostItem,1,charindex(',',@CostItem),'')
END
SET @SQL=STUFF(@SQL,1,10,'')+ 'ORDER BY 区块,费用类型'
EXEC(@SQL)
END
GO
EXEC GetStallCostStartData '物业管理费,空调费,电费','A区,B区'
GO
/*
房号 面积 区块 费用类型 金额
---------- ----------- ---------- ---------- -----------
A001 8 A区 电费 0
A002 10 A区 电费 0
A003 12 A区 电费 0
A002 10 A区 空调费 0
A003 12 A区 空调费 0
A001 8 A区 空调费 0
A003 12 A区 物业管理费 0
A001 8 A区 物业管理费 0
A002 10 A区 物业管理费 0
A002 10 B区 电费 0
A001 8 B区 电费 0
A003 12 B区 电费 0
A003 12 B区 空调费 0
A002 10 B区 空调费 0
A001 8 B区 空调费 0
A003 12 B区 物业管理费 0
A002 10 B区 物业管理费 0
A001 8 B区 物业管理费 0
*/
DROP PROCEDURE dbo.GetStallCostStartData
DROP TABLE Stall
GO
CREATE TABLE #TAB(房号 varchar(4),面积 float, 区块 varchar(10), 费用类型 varchar(10) ,金额 int)
insert into #tab values('A001',8.0,'A区','物业管理费',0)
insert into #tab values('A001',8.0,'A区','空调费',0)
insert into #tab values('A002',10.0,'A区','物业管理费',0)
insert into #tab values('A002',10.0,'A区','空调费',0)
insert into #tab values('A001',8.0,'b区','物业管理费',0)
insert into #tab values('A001',8.0,'b区','空调费',0)
insert into #tab values('A002',10.0,'b区','物业管理费',0)
insert into #tab values('A002',10.0,'b区','空调费',0)
insert into #tab values('A003',8.0,'b区','物业管理费',0)
insert into #tab values('A003',8.0,'b区','空调费',0)
insert into #tab values('A003',10.0,'a区','电费',0)
insert into #tab values('A003',10.0,'c区','空调费',0)
insert into #tab values('A002',10.0,'c区','物业管理费',0)
CREATE PROCEDURE dbo.GetStallCostStartData
(
@CostItem nVARCHAR(200),
@BlockID nVARCHAR(200)
)
as
BEGIn
exec('select * from #tab where charindex('',''+区块+'','','',''+'''+@BlockID+'''+'','')>0 and charindex('',''+费用类型+'','','',''+'''+@CostItem+'''+'','')>0')
end
exec GetStallCostStartData '物业管理费,空调费','A区,B区'
房号 面积 区块 费用类型 金额
---- ---------------------- ---------- ---------- -----------
A001 8 A区 物业管理费 0
A001 8 A区 空调费 0
A002 10 A区 物业管理费 0
A002 10 A区 空调费 0
A001 8 b区 物业管理费 0
A001 8 b区 空调费 0
A002 10 b区 物业管理费 0
A002 10 b区 空调费 0
A003 8 b区 物业管理费 0
A003 8 b区 空调费 0
(10 行受影响)
CREATE PROCEDURE dbo.GetStallCostStartData
@CostItem nVARCHAR(400),
@BlockID nVARCHAR(400)
AS
BEGIN
SET NOCOUNT ON
DECLARE @SQL NVARCHAR(4000)
SELECT @BlockID =''''+replace(@BlockID , ',' , ''',''')+''''
@CostItem=@CostItem + ',',@SQL=''
WHILE charindex(',',@CostItem)>0
BEGIN
SELECT @SQL=@SQL+' UNION ALL SELECT 房号,面积,区块,'''+left(@CostItem,charindex(',',@CostItem)-1)+''' as 费用类型,0 as 金额 from dbo.Stall WHERE 区块 in('+@BlockID+')'
@CostItem=stuff(@CostItem,1,charindex(',',@CostItem),'')
END
EXEC(@SQL)
END
GO