表中是这样,
部门号 部门信息
1 部门一
2 部门二
3 部门三
4 部门四
现在想得到结果如下:
部门号 部门信息 部门分号
1 部门一 1
1 部门一 2
2 部门二 1
2 部门二 2
1 部门三 1
1 部门三 2
1 部门四 1
1 部门四 2
就是将原来的部门划分两个,全部在分类为1,2如何搞,多谢!
部门号 部门信息
1 部门一
2 部门二
3 部门三
4 部门四
现在想得到结果如下:
部门号 部门信息 部门分号
1 部门一 1
1 部门一 2
2 部门二 1
2 部门二 2
1 部门三 1
1 部门三 2
1 部门四 1
1 部门四 2
就是将原来的部门划分两个,全部在分类为1,2如何搞,多谢!
(select 1 部门分号 union all select 2 部门分号) n
select a.*,部门分号=number
from tb a
inner join master..spt_values b on b.type='p'
where number between 1 and 2??
insert into tb values(1 , '部门一')
insert into tb values(2 , '部门二')
insert into tb values(3 , '部门三')
insert into tb values(4 , '部门四')
goselect m.* , n.部门分号 from tb m,
(select 1 部门分号 union all select 2 部门分号) ndrop table tb /*
部门号 部门信息 部门分号
----------- ---------- -----------
1 部门一 1
1 部门一 2
2 部门二 1
2 部门二 2
3 部门三 1
3 部门三 2
4 部门四 1
4 部门四 2(所影响的行数为 8 行)*/
select 部门号,部门信息,1 部门分号
from 部门
union all
select 部门号,部门信息,2 部门分号
from 部门
WHERE A.部门号=B.部门号 AND A.部门信息=B.部门信息
GROUP BY 部门号, 部门信息,部门分号 HAVING COUNT(*)=2
WHERE A.部门号=B.部门号 AND A.部门信息=B.部门信息
GROUP BY B.部门号, B.部门信息,B.部门分号 HAVING COUNT(B.*)=2
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-10-13 09:17:41
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([部门号] int,[部门信息] varchar(6))
insert [tb]
select 1,'部门一' union all
select 2,'部门二' union all
select 3,'部门三' union all
select 4,'部门四'
--------------开始查询--------------------------
select *,部门分号=row_number() over(partition by 部门信息 order by 部门号,部门信息) from
(select * from [tb] a
union all
select * from [tb] b
)t
order by 1
----------------结果----------------------------
/* 部门号 部门信息 部门分号
----------- ------ --------------------
1 部门一 1
1 部门一 2
2 部门二 1
2 部门二 2
3 部门三 1
3 部门三 2
4 部门四 1
4 部门四 2(8 行受影响)*/