【问题标题】:sql select a field into 2 columnssql将一个字段选择为2列
【发布时间】:2014-01-14 19:32:30
【问题描述】:

我试图在同一张表上运行以下 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

谢谢

【问题讨论】:

  • SQL 结果集本质上是无序的除非您使用order by 子句。没有“第一”或“第二”行的概念。这两个结果集是如何排序的?
  • order by 子句可以在ROW_NUMBER 等窗口函数中。只是不限于最终的 ORDER BY

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


【解决方案1】:

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

这就是关系代数和规范化的想法。否则,数据的相关性是没有意义的。

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

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

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

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

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

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

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

【讨论】:

  • OP 只使用一个(单个)表 - 请参阅他帖子的第一句话。
  • 如果只有一张表,SELECT COL1, COL2 FROM TABLE1。关系在元组或记录中。
  • 错误。阅读帖子。
  • 你是对的,我会重新发布。再说一遍,为什么?显然不是正常形式。一张表,一种数据,一键...
  • 我认为您需要FULL OUTER JOIN 来涵盖类别具有不同行数的情况。
猜你喜欢
  • 2016-11-24
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2013-03-08
  • 2011-06-21
相关资源
最近更新 更多