sql选择一个字段为2列

时间:2014-01-14 19:32:31

标签: sql sql-server sql-server-2008 multiple-columns

我试图在同一个表上运行2个以下的查询,并希望在2个不同的列中获得结果。

查询1:select ID as M from table where field = 1 返回:

1
2
3

查询2:select ID as N from table where field = 2 返回:

4
5
6

我的目标是获得

Column1 - Column2
-----------------
1            4
2            5
3            6

有什么建议吗?我正在使用SQL Server 2008 R2

由于

1 个答案:

答案 0 :(得分:2)

两个表之间的JOIN数据的外键关系必须有一个主键。

这是关于关系代数和规范化的想法。否则,数据的相关性毫无意义。

http://en.wikipedia.org/wiki/Database_normalization

CROSS JOIN将为您提供所有可能性。 (1,4),(1,5),(1,6)......(3,6)。我认为这不是你想要的。

您始终可以使用ROW_NUMBER()OVER()函数在两个表中生成代理键。在OVER()子句中按照您想要的方式排序数据。但是,这仍然不是任何正常形式。

简而言之。为什么这样做?

快速测试数据库。使用非正常形式存储体育用品和家居用品的产品。

SELECT的结果并不意味着什么。

-- Just play
use tempdb;
go

-- Drop table
if object_id('abnormal_form') > 0
drop table abnormal_form
go

-- Create table
create table abnormal_form
(
    Id int,
    Category int,
    Name varchar(50)
);

-- Load store products
insert into abnormal_form values
(1, 1, 'Bike'),
(2, 1, 'Bat'),
(3, 1, 'Ball'),
(4, 2, 'Pot'),
(5, 2, 'Pan'),
(6, 2, 'Spoon');

-- Sporting Goods
select * from abnormal_form where Category = 1

-- Home Goods
select * from abnormal_form where Category = 2

-- Does not mean anything to me
select Id1, Id2 from
(select ROW_NUMBER () OVER (ORDER BY ID) AS Rid1, Id as Id1 
 from abnormal_form where Category = 1) as s
join
(select ROW_NUMBER () OVER (ORDER BY ID) AS Rid2, Id as Id2 
 from abnormal_form where Category = 2) as h
on s.Rid1 = h.Rid2

我们肯定需要用户提供更多信息。

enter image description here