Дизайн таблицы в SQL Server 2008 - PullRequest
0 голосов
/ 14 ноября 2011

Не могли бы вы прокомментировать следующий странный и сложный дизайн.Я хочу продолжить с этим дизайном.Это существующий дизайн, который я не создал.

Сотрудник

EmpID
-----
  1
  2 

Атрибут

AttributeID Name Visible
------------------------
  1        Name    1
  2        Age     1
  3        Salary  1

EmployeeAttribute

EmpID AttributeID Value
-----------------------
 1       1        Rauf
 1       2        23
 1       3        100000 
 2       1        Amal
 2       3        50000

Я хочу выбрать приведенную выше таблицу следующим образом

EmpID   Name  Age  Salary 
-------------------------
  1     Rauf   23   100000 
  2     Amal         50000 

Как это сделать в SQL Server 2008?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Вы тоже можете присоединиться к себе

SELECT
   T1.EmpID,
   T1.Value As [name], T2.Value As [age], T3.Value As [salary]
FROM
   EmployeeAttribute T1
   JOIN
   EmployeeAttribute T2 ON T1.EmpID= T2.EmpID
   JOIN
   EmployeeAttribute T3 ON T1.EmpID= T3.EmpID
WHERE
   T1.AttributeID =1
   AND
   T2.AttributeID =2
   AND
   T3.AttributeID =3
1 голос
/ 14 ноября 2011

Это модель EAV .Чтобы получить желаемые результаты, вам нужно будет PIVOT на AttributeID, используя PIVOT или как показано ниже.

SELECT EmpID,
       MAX(CASE WHEN AttributeID =1 THEN Value END) AS Name,
       MAX(CASE WHEN AttributeID =2 THEN Value END) AS Age,
       MAX(CASE WHEN AttributeID =3 THEN Value END) AS Salary
FROM EmployeeAttribute
GROUP BY EmpID

EAV является гибким, но имеет много недостатков (Google "EAV anti pattern"чтобы узнать больше об этом.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...