Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Таблица с разными наборами данных. Выборка  [new]
pol_butcher
Member

Откуда:
Сообщений: 2
Добрый день. До этого с данными таблицами не сталкивался и ума не приложу как вытащить данные в одну строку.
Для примера:
Таблица
id---name---val
1---Имя---Вася
1---Фамилия---Пупкин
1---Квартира---1 Квартира
1---Адрес---Ул.Васильева 36
2---Имя---Петя
И так далее.
Как выбрать эти данные в одну строку?
Имя-Фамилия-Квартира-Адрес
Вася-Пупкин-1 Квартира- Ул.Васильева 36

Данных в этой таблице очень много и необходимо делать выборку по разным значениям NAME. Прошу помощи куда копать.
Были идеи каждый запрос сохранять в массив и перебирать с каждым разом. Но чувствую что это что-то не то))
11 авг 19, 19:59    [21946591]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с разными наборами данных. Выборка  [new]
londinium
Member

Откуда: Киев
Сообщений: 1096
pol_butcher,
USE MASTER
GO
/*
Таблица
id---name---val
1---Имя---Вася
1---Фамилия---Пупкин
1---Квартира---1 Квартира
1---Адрес---Ул.Васильева 36
2---Имя---Петя
*/
WITH TAB(ID,NAME,VAL)
AS
(
  SELECT 1 AS ID,'NAME'AS NAME,'VASYA'AS VAL
    UNION ALL
  SELECT 1 AS ID,'SURNAME'AS NAME,'PUPKIN'AS VAL
    UNION ALL
  SELECT 1 AS ID,'FLAT'AS NAME,'1 FLAT'AS VAL
    UNION ALL
  SELECT 1 AS ID,'ADDRESS'AS NAME,'VASILIEVA 36'
    UNION ALL
  SELECT 2 AS ID,'NAME'AS NAME,'PETIA'        
)

/*
Как выбрать эти данные в одну строку?
Имя-Фамилия-Квартира-Адрес
Вася-Пупкин-1 Квартира- Ул.Васильева 36
*/
SELECT T.VAL+' '+ISNULL(TSURNAMEQUERY.VAL,'')+' '+ISNULL(TFLATQUERY.VAL,'')+' '+ISNULL(TADDRESSQUERY.VAL,'')
FROM TAB AS T
LEFT JOIN TAB AS TSURNAMEQUERY ON T.ID=TSURNAMEQUERY.ID AND TSURNAMEQUERY.NAME='SURNAME'
LEFT JOIN TAB AS TFLATQUERY ON T.ID=TFLATQUERY.ID AND TFLATQUERY.NAME='FLAT'
LEFT JOIN TAB AS TADDRESSQUERY ON T.ID=TADDRESSQUERY.ID AND TADDRESSQUERY.NAME='ADDRESS'
WHERE T.NAME='NAME'
11 авг 19, 20:17    [21946602]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с разными наборами данных. Выборка  [new]
invm
Member

Откуда: Москва
Сообщений: 8717
select
 p.*
from
 (
  values
   (1, 'Имя', 'Вася'),
   (1, 'Фамилия', 'Пупкин'),
   (1, 'Квартира', '1 Квартира'),
   (1, 'Адрес', 'Ул.Васильева 36'),
   (2, 'Имя', 'Петя')
 ) t(id, name, val)
pivot
(
 min(val) for name in ([Имя], [Фамилия], [Квартира], [Адрес])
) p;
11 авг 19, 20:31    [21946609]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с разными наборами данных. Выборка  [new]
iap
Member

Откуда: Москва
Сообщений: 46815
Непонятно, что определяет порядок строк в этой чудо-таблице.
Придётся не заморачиваться с этим.
WITH Tab AS
(
 SELECT * FROM
 (VALUES
  (1,'Имя','Вася')
 ,(1,'Фамилия','Пупкин')
 ,(1,'Квартира','1 Квартира')
 ,(1,'Адрес','Ул.Васильева 36')
 ,(2,'Имя','Петя')
 ) T(id,[Name],val)
)
SELECT STUFF(
(
 SELECT ' - '+TT.[name]+' - '+TT.[val]
 FROM Tab TT
 WHERE TT.id=Tab.id
 FOR XML PATH(''),TYPE
).value('.','nvarchar(max)')
,1,3,''
) S
FROM Tab
GROUP BY id
ORDER BY id;
11 авг 19, 20:57    [21946629]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с разными наборами данных. Выборка  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1011
iap
Непонятно, что определяет порядок строк в этой чудо-таблице.
Придётся не заморачиваться с этим.

Не, ну при желании можно и заморочиться, задав порядок явно внешней таблицей )

WITH Tab AS
(
 SELECT * FROM
 (VALUES
  (1,'Имя','Вася')
 ,(1,'Фамилия','Пупкин')
 ,(1,'Квартира','1 Квартира')
 ,(1,'Адрес','Ул.Васильева 36')
 ,(2,'Имя','Петя')
 ) T(id,[Name],val)
), ord AS 
(SELECT * FROM (VALUES (1, 'Адрес'), (2, 'Квартира'), (3, 'Фамилия'), (4, 'Имя')) AS t(id, [Name]))
SELECT STUFF(
(
 SELECT ' - '+TT.[name]+' - '+TT.[val]
 FROM Tab TT
        INNER JOIN ord ON tt.Name = ord.name
 WHERE TT.id=Tab.id
 ORDER BY ord.id
 FOR XML PATH(''),TYPE
).value('.','nvarchar(max)')
,1,3,''
) S
FROM Tab
GROUP BY id
ORDER BY id;
12 авг 19, 09:46    [21946825]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с разными наборами данных. Выборка  [new]
pol_butcher
Member

Откуда:
Сообщений: 2
Какие страшные запросы)). Явно я не sqlщик. Скажите, а зачем так делают. Все данные в одной таблице. Лучше же таблицы разделить?
12 авг 19, 18:43    [21947476]     Ответить | Цитировать Сообщить модератору
 Re: Таблица с разными наборами данных. Выборка  [new]
4d_monster
Member

Откуда: Москва
Сообщений: 1524
pol_butcher
Какие страшные запросы)). Явно я не sqlщик. Скажите, а зачем так делают. Все данные в одной таблице. Лучше же таблицы разделить?


Это недоделанный вариант EAV модели хранения в РСУБД.
13 авг 19, 08:16    [21947655]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить