在SQL Server表中有一个主列和两个子列

时间:2011-09-07 15:01:40

标签: sql sql-server-2008

我在SQL Server中创建表时有一个小查询。

表格中有6列。每列都有一个名称。

在这些专栏中,我想进一步将其划分为两列,分别为正面和负面。

因此

  • Column1(正面|负面)
  • Column2(正面|负面)......

将是表架构。

我理解创建列然后将名称与它们相关联将很容易,但是如何在创建表时将列分成两列并将它们命名为子列。

2 个答案:

答案 0 :(得分:5)

如果Column1_PositiveColumn1_Negative是两个不同的属性,那么您需要两个单独的列来存储这些属性。没有将单个列细分为两个元素。

答案 1 :(得分:3)

根据Joe Stefanelli的回答,你不能细分一栏。

感觉好像你正在尝试将每个列视为它自己的结构或类。您最好将TABLE视为结构,并将每个FIELD视为基元。

你能得到的最接近的是要么创建12列,要么恰当地命名它们(C1_Pos,C1_Neg,C2_Pos,C2_Neg等)或创建两个表。

一个表将拥有它的主键列,然后是两个值列; positivenegative。然后,主表中的每个条目都将引用此表。

例如......

CREATE TABLE value_pair (
  id                 INT,
  positive           INT,
  negative           INT,
  PRIMARY KEY (id)
);

CREATE TABLE master (
  id                 INT,
  value_pair_id_1    INT,
  value_pair_id_2    INT,
  value_pair_id_3    INT,
  value_pair_id_4    INT,
  value_pair_id_5    INT,
  value_pair_id_6    INT,
  PRIMARY KEY (id),
  FOREIGN KEY (value_pair_id_1) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_2) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_3) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_4) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_5) REFERENCES value_pair (id),
  FOREIGN KEY (value_pair_id_6) REFERENCES value_pair (id)
);

然而,只要你想抓住其中一个值,你就不得不加入这两个表。如果你想要所有的价值,你必须加入6次......

SELECT
  *
FROM
  master
INNER JOIN
  value_pair    AS [VP1]
    ON master.value_pair_id_1 = [VP1].id
INNER JOIN
  value_pair    AS [VP2]
    ON master.value_pair_id_2 = [VP1].id
INNER JOIN
  value_pair    AS [VP3]
    ON master.value_pair_id_3 = [VP1].id
INNER JOIN
  value_pair    AS [VP4]
    ON master.value_pair_id_4 = [VP1].id
INNER JOIN
  value_pair    AS [VP5]
    ON master.value_pair_id_5 = [VP1].id
INNER JOIN
  value_pair    AS [VP6]
    ON master.value_pair_id_6 = [VP1].id


就个人而言,我只使用12列......