Справка SQL - Как «линеаризовать» данные? - PullRequest
0 голосов
/ 11 августа 2010

Я не уверен, что термин «линеаризация» является правильным, но мне нужен запрос, который выведет что-то вроде этого:

item_name    item_price  first_name  last_name
-----------------------------------------------
'camera'    '100'        'Little'    'Timmy'
'computer'  '200'        'Little'    'Timmy'

Вот моя БД: http://pastebin.com/iS4QKHEb

Любая помощь с благодарностью.Спасибо.

Ответы [ 3 ]

0 голосов
/ 11 августа 2010

Вот:

SELECT MAX(CASE WHEN f.name = 'item_name' THEN fd.value ELSE NULL END) AS item_name,
       MAX(CASE WHEN f.name = 'item_price' THEN fd.value ELSE NULL END) AS item_price,
       MAX(CASE WHEN f.name = 'first_name' THEN fd.value ELSE NULL END) AS first_name,
       MAX(CASE WHEN f.name = 'last_name' THEN fd.value ELSE NULL END) AS last_name
  FROM FIELDDATA fd
  JOIN FIELD f ON f.id = fd.fieldid

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

И если вы [вероятно] хотите, чтобы это было динамическим, для него потребуется динамический SQL с использованием синтаксиса MySQL Prepared Statement .

0 голосов
/ 11 августа 2010

К сожалению - если вы дали нам все, что у вас есть ... "вы не сможете добраться отсюда".

Если вы хотите получить ...

item_name    item_price  first_name  last_name
-----------------------------------------------
'camera'    '100'        'Little'    'Timmy'
'computer'  '200'        'Little'    'Timmy'

... из ...

INSERT INTO `fielddata` (`Id`, `DataSourceId`, `FieldId`, `Value`) VALUES
(1, 15, 100, 'camera'),
(2, 15, 101, '100'),
(3, 15, 100, 'computer'),
(4, 15, 101, '200'),
(5, 15, 102, 'Little'),
(6, 15, 103, 'Timmy');


INSERT INTO `field` (`Id`, `FieldAttributeId`, `FieldSetId`, `FormId`, `LookupFieldTypeId`, `Description`, `DisplayOrder`, `IsDeleted`, `Label`, `Name`) VALUES
(102, 0, 0, 1, 6, 'First Name Description', 0, 0, 'First Name Label', 'first_name'),
(103, 0, 0, 1, 6, 'Last Name Description', 0, 0, 'Last Name Label', 'last_name'),
(100, 0, 1, 1, 6, 'Item Name Description', 0, 0, 'Item Name Label', 'item_name'),
(101, 0, 1, 1, 6, 'Item Price Description', 0, 0, 'Item Price Label', 'item_price');

Вам нужно будет иметь возможность тянуть каждый столбецкак подобранный подобный вариант, как ...знать, какая цена соответствует какому имени, потому что в таблице полевых данных нет своего рода item_id.

Дайте нам знать, если есть что-то, что случайно было исключено.классная работа?Похоже на какое-то упражнение ...

Удачи!

0 голосов
/ 11 августа 2010

Можете ли вы объяснить, что вы ищете?SQL-запрос для отображения всех данных?Что-то вроде

SELECT *

или

SELECT item_name, item_price, first_name, last_name

?

...