原户信息表、表一
户代码 姓名
30201 张三
30202 李四
30203 王五
30205 赵六分户记录表记录那一户有分户,
下表中35201,张三家分了两户出去,赵六家分了一户, 这些分户信息见表三,
表二
原户代码,分户后代码
30201 30206
30201 30207
30205 30208新分户未审核记录表,
此表数据审核后才进入表一
表三
户代码 姓名
30206 张三子1
30207 张三子2
30208 赵六子1为了便于审核
我想把有分户的原数据和从他分出去的新户数据分别挨在一起如下示例:
原户 30201 张三
分出户 30206 张三子1
分出户 30207 张三子2
原户 30205 赵六
分出户 30208 赵六子1
户代码 姓名
30201 张三
30202 李四
30203 王五
30205 赵六分户记录表记录那一户有分户,
下表中35201,张三家分了两户出去,赵六家分了一户, 这些分户信息见表三,
表二
原户代码,分户后代码
30201 30206
30201 30207
30205 30208新分户未审核记录表,
此表数据审核后才进入表一
表三
户代码 姓名
30206 张三子1
30207 张三子2
30208 赵六子1为了便于审核
我想把有分户的原数据和从他分出去的新户数据分别挨在一起如下示例:
原户 30201 张三
分出户 30206 张三子1
分出户 30207 张三子2
原户 30205 赵六
分出户 30208 赵六子1
解决方案 »
- 问一简单的SQL的查询问题
- N'的含義不明白
- 在sqlserver中如何对text类型的数据进行replace操作。
- 关于osql的使用
- 怎樣將一個mdb文件用SQL語句導入到SQL Server資料庫中(詳情見內)。。。在線等待
- 讨论一个关于JOIN的问题...
- 求助:给分
- 怎样在SQL SERVER里将两个字段一起设为关键字?
- 通过宽带(ADSL)用vb连接远程sqlserver,出现[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或访问被拒绝错误!
- 求一sql语句?在线等待 (to 老衲 dali)
- 初学SQL Server 不知怎么登录
- 求一条SQL语句。。。
select
t.类型,isnull(t.分户代码,t.户代码) as 户代码,t.姓名
from
(select
'原户' as 类型,n.户代码,null as 分户代码,n.姓名
from
原户信息表 n
where
exists(select 1 from 分户记录表 where 原户代码=n.户代码)
union all
select
'分出户' as 类型,a.户代码,c.户代码 as 分户代码,c.姓名
from
原户信息表 a,分户记录表 b,新分户未审核记录表 c
where
a.户代码=b.原户代码 and b.分户后代码=c.户代码) t
order by
t.户代码,t.分户代码
[/code]
FROM (
SELECT '原户' 'TYPE',[户代码] '原户',[户代码] '分出户',[姓名] FROM [表一] T1
UNION ALL
SELECT '分出户',T2.[原户代码],T2.[分户后代码],T3.[姓名]
FROM [表二] T2
INNER JOIN [表三] T3 ON T2.[分户后代码]=T3.[户代码]
) T
ORDER BY [原户],CASE WHEN [TYPE]='原户' THEN 0 ELSE 1 END
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-04-21 14:46:32
-- Verstion:
-- Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86)
-- May 26 2009 14:24:20
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([户代码] int,[姓名] varchar(4))
insert [a]
select 30201,'张三' union all
select 30202,'李四' union all
select 30203,'王五' union all
select 30205,'赵六'
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go
create table [b]([原户代码] int,[分户后代码] int)
insert [b]
select 30201,30206 union all
select 30201,30207 union all
select 30205,30208
--> 测试数据:[c]
if object_id('[c]') is not null drop table [c]
go
create table [c]([户代码] int,[姓名] varchar(7))
insert [c]
select 30206,'张三子1' union all
select 30207,'张三子2' union all
select 30208,'赵六子1'
--------------开始查询--------------------------
select
t.类型,isnull(t.分户代码,t.户代码) as 户代码,t.姓名
from
(select
'原户' as 类型,t.户代码,null as 分户代码,t.姓名
from
a t
where
exists(select 1 from b where 原户代码=t.户代码)
union all
select
'分出户' as 类型,a.户代码,c.户代码 as 分户代码,c.姓名
from
a, b, c
where
a.户代码=b.原户代码 and b.分户后代码=c.户代码) t
order by
t.户代码,t.分户代码----------------结果----------------------------
/* 类型 户代码 姓名
------ ----------- -------
原户 30201 张三
分出户 30206 张三子1
分出户 30207 张三子2
原户 30205 赵六
分出户 30208 赵六子1(5 行受影响)
*/
(
户代码 nvarchar(50),
姓名 nvarchar(50)
)
insert into #T1 select '30201','张三'
insert into #T1 select '30202','张三'
insert into #T1 select '30203','张三'
insert into #T1 select '30205','张三'create table #T2
(
原户代码 nvarchar(50),
分户后代码 nvarchar(50)
)
insert into #T2 select '30201','30206'
insert into #T2 select '30201','30207'
insert into #T2 select '30205','30208'create table #T3
(
户代码 nvarchar(50),
姓名 nvarchar(50)
)
insert into #T3 select '30206','张三子1'
insert into #T3 select '30207','张三子2'
insert into #T3 select '30208','赵六子1'
select * from #T3select distinct '原户',T1.户代码,T1.姓名 from #T1 T1
join
(
select T2.原户代码,'分出户' 分出户,T3.户代码,T3.姓名 from #T2 T2
join #T3 T3 on T2.分户后代码=T3.户代码
) T2
on T1.户代码=T2.原户代码
union all
select '分出户' 分出户,T3.户代码,T3.姓名 from #T2 T2
join #T3 T3 on T2.分户后代码=T3.户代码 户代码 姓名
------ -------------------------------------------------- --------------------------------------------------
原户 30201 张三
原户 30205 张三
分出户 30206 张三子1
分出户 30207 张三子2
分出户 30208 赵六子1(5 行受影响)
create table #tt1(户代码 int, 姓名 varchar(20))
insert #tt1 select 30201 ,'张三'
insert #tt1 select 30202 ,'李四'
insert #tt1 select 30203 ,'王五'
insert #tt1 select 30205 ,'赵六'create table #tt2(原户代码 int,分户后代码 int)
insert #tt2 select 30201, 30206
insert #tt2 select 30201, 30207
insert #tt2 select 30205, 30208create table #tt3(户代码 int, 姓名 varchar(20))
insert #tt3 select 30206 ,'张三子1'
insert #tt3 select 30207 ,'张三子2'
insert #tt3 select 30208 ,'赵六子1'with cte as(
select '原户' as stat,a.*,cast(户代码 as binary(4)) as path from #tt1 a where exists(select 1 from #tt2 where a.户代码=原户代码)
union all
select '分出户',a.分户后代码,c.姓名,b.path+cast(row_number() over(partition by a.原户代码 order by 分户后代码) as binary(4))
from #tt2 a
,(select *,cast(户代码 as binary(4)) as path from #tt1) b
,#tt3 c
where a.原户代码=b.户代码 and a.分户后代码=c.户代码
)select stat,户代码,姓名 from cte
order by pathstat 户代码 姓名
------ ----------- --------------------
原户 30201 张三
分出户 30206 张三子1
分出户 30207 张三子2
原户 30205 赵六
分出户 30208 赵六子1(5 行受影响)
SELECT [TYPE],[分出户],[姓名]
FROM (
SELECT '原户' 'TYPE',[户代码] '原户',[户代码] '分出户',[姓名] FROM a T1 where exists(select 1 from b where 原户代码=t1.户代码)
UNION ALL
SELECT '分出户',T2.[原户代码],T2.[分户后代码],T3.[姓名]
FROM b T2
INNER JOIN c T3 ON T2.[分户后代码]=T3.[户代码]
) T
ORDER BY [原户],CASE WHEN [TYPE]='原户' THEN 0 ELSE 1 END
create table #tt1(户代码 int, 姓名 varchar(20))
insert #tt1 select 30201 ,'张三'
insert #tt1 select 30202 ,'李四'
insert #tt1 select 30203 ,'王五'
insert #tt1 select 30205 ,'赵六'create table #tt2(原户代码 int,分户后代码 int)
insert #tt2 select 30201, 30206
insert #tt2 select 30201, 30207
insert #tt2 select 30205, 30208create table #tt3(户代码 int, 姓名 varchar(20))
insert #tt3 select 30206 ,'张三子1'
insert #tt3 select 30207 ,'张三子2'
insert #tt3 select 30208 ,'赵六子1'with cte as(
select '原户' as stat,a.*,cast(户代码 as binary(4)) as path from #tt1 a where exists(select 1 from #tt2 where a.户代码=原户代码)
union all
select '分出户',a.分户后代码,c.姓名,b.path+cast(row_number() over(partition by a.原户代码 order by 分户后代码) as binary(4))
from #tt2 a
,(select *,cast(户代码 as binary(4)) as path from #tt1) b
,#tt3 c
where a.原户代码=b.户代码 and a.分户后代码=c.户代码
)select stat,户代码,姓名 from cte
order by pathstat 户代码 姓名
------ ----------- --------------------
原户 30201 张三
分出户 30206 张三子1
分出户 30207 张三子2
原户 30205 赵六
分出户 30208 赵六子1(5 行受影响)
(
户代码 nvarchar(50),
姓名 nvarchar(50)
)
insert into #T1 select '30201','张三'
insert into #T1 select '30202','张三'
insert into #T1 select '30203','张三'
insert into #T1 select '30205','张三'create table #T2
(
原户代码 nvarchar(50),
分户后代码 nvarchar(50)
)
insert into #T2 select '30201','30206'
insert into #T2 select '30201','30207'
insert into #T2 select '30205','30208'create table #T3
(
户代码 nvarchar(50),
姓名 nvarchar(50)
)
insert into #T3 select '30206','张三子1'
insert into #T3 select '30207','张三子2'
insert into #T3 select '30208','赵六子1'
select * from #T3select distinct '原户' '户型',T1.户代码,T1.姓名 from #T1 T1
join
(
select T2.原户代码,'分出户' 分出户,T3.户代码,T3.姓名 from #T2 T2
join #T3 T3 on T2.分户后代码=T3.户代码
) T2
on T1.户代码=T2.原户代码
union all
select '分出户' 分出户,T3.户代码,T3.姓名 from #T2 T2
join #T3 T3 on T2.分户后代码=T3.户代码 户型 户代码 姓名
------ -------------------------------------------------- --------------------------------------------------
原户 30201 张三
原户 30205 张三
分出户 30206 张三子1
分出户 30207 张三子2
分出户 30208 赵六子1(5 行受影响)
---------------------------------------------------------------
-- DESIGNER :happycell188(喜喜)
-- QQ :584738179
-- Development Tool :Microsoft Visual C++ 6.0 C Language
-- FUNCTION :CONVERT DATA TO T-SQL
---------------------------------------------------------------
-- Microsoft SQL Server 2005
-- Developer Edition on Microsoft Windows XP [版本 5.1.2600]
---------------------------------------------------------------
---------------------------------------------------------------use test
go
if object_id('test.dbo.tb1') is not null drop table tb1
-- 创建数据表
create table tb1
(
户代码 int,
姓名 char(5)
)
go
--插入测试数据
insert into tb1 select 30201,'张三'
union all select 30202,'李四'
union all select 30203,'王五'
union all select 30205,'赵六'
go
if object_id('test.dbo.tb2') is not null drop table tb2
-- 创建数据表
create table tb2
(
原户代码 int,
分户后代码 int
)
go
--插入测试数据
insert into tb2 select 30201,30206
union all select 30201,30207
union all select 30205,30208
go
if object_id('test.dbo.tb3') is not null drop table tb3
-- 创建数据表
create table tb3
(
户代码 int,
姓名 char(8)
)
go
--插入测试数据
insert into tb3 select 30206,'张三子1'
union all select 30207,'张三子2'
union all select 30208,'赵六子1'
go
--代码实现
select * from (
select '分出户' 类别,户代码,姓名 from tb2,tb3 where 分户后代码=户代码
union select '原户' 类别,* from tb1 where 户代码 in(select 原户代码 from tb2))t
order by 姓名,户代码/*测试结果类别 户代码 姓名
---------------------
原户 30201 张三
分出户 30206 张三子1
分出户 30207 张三子2
原户 30205 赵六
分出户 30208 赵六子1
(5 行受影响)
*/
CREATE TABLE A(ID NVARCHAR(50),NAME NVARCHAR(50))
CREATE TABLE B(A NVARCHAR(50),B NVARCHAR(50))
CREATE TABLE C(ID NVARCHAR(50),NAME NVARCHAR(50))
INSERT INTO A
SELECT '30201', '张三'UNION
SELECT '30202' ,'李四'UNION
SELECT '30203' ,'王五'UNION
SELECT '30205' ,'赵六'
INSERT INTO B
SELECT '30201', '30206'UNION
SELECT '30201' ,'30207'UNION
SELECT '30205' ,'30208'
INSERT INTO C
SELECT '30206', '张三子1'UNION
SELECT '30207' ,'张三子2'UNION
SELECT '30208' ,'赵六子1'select id,name
from a
where a.id in(select a from b)
union all
SELECT a.a+b.id id,b.name
FROM B A
INNER JOIN C B ON b.ID=a.b
order by id
/*
30201 张三
3020130206 张三子1
3020130207 张三子2
30205 赵六
3020530208 赵六子1
*/
--create table newuser(oldcode varchar(100),newcode varchar(100))
--create table nocheckuser(code varchar(100),name varchar(100))
--insert into olduser
--select '30201','张三' union
--select '30202','李四' union
--select '30203','王五' union
--select '30204','赵六'
--insert into newuser
--select '30201','30206' union
--select '30201','30207' union
--select '30205','30208'
--insert into nocheckuser
--select '30206','张三子1' union
--select '30207','张三子2' union
--select '30208','赵六子1'
select o.*,a.* from olduser o inner join newuser n on o.code=n.oldcode inner join nocheckuser a on n.newcode=a.code
30201 张三 30206 张三子1
30201 张三 30207 张三子2
30205 赵六 30208 赵六子1这样还好看点