powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Таблица с разными наборами данных. Выборка
7 сообщений из 7, страница 1 из 1
Таблица с разными наборами данных. Выборка
    #39848003
pol_butcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. До этого с данными таблицами не сталкивался и ума не приложу как вытащить данные в одну строку.
Для примера:
Таблица
id---name---val
1---Имя---Вася
1---Фамилия---Пупкин
1---Квартира---1 Квартира
1---Адрес---Ул.Васильева 36
2---Имя---Петя
И так далее.
Как выбрать эти данные в одну строку?
Имя-Фамилия-Квартира-Адрес
Вася-Пупкин-1 Квартира- Ул.Васильева 36

Данных в этой таблице очень много и необходимо делать выборку по разным значениям NAME. Прошу помощи куда копать.
Были идеи каждый запрос сохранять в массив и перебирать с каждым разом. Но чувствую что это что-то не то))
...
Рейтинг: 0 / 0
Таблица с разными наборами данных. Выборка
    #39848008
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol_butcher,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
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'
...
Рейтинг: 0 / 0
Таблица с разными наборами данных. Выборка
    #39848012
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select
 p.*
from
 (
  values
   (1, 'Имя', 'Вася'),
   (1, 'Фамилия', 'Пупкин'),
   (1, 'Квартира', '1 Квартира'),
   (1, 'Адрес', 'Ул.Васильева 36'),
   (2, 'Имя', 'Петя')
 ) t(id, name, val)
pivot
(
 min(val) for name in ([Имя], [Фамилия], [Квартира], [Адрес])
) p;
...
Рейтинг: 0 / 0
Таблица с разными наборами данных. Выборка
    #39848019
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно, что определяет порядок строк в этой чудо-таблице.
Придётся не заморачиваться с этим.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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;
...
Рейтинг: 0 / 0
Таблица с разными наборами данных. Выборка
    #39848111
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapНепонятно, что определяет порядок строк в этой чудо-таблице.
Придётся не заморачиваться с этим.
Не, ну при желании можно и заморочиться, задав порядок явно внешней таблицей )

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
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;
...
Рейтинг: 0 / 0
Таблица с разными наборами данных. Выборка
    #39848492
pol_butcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какие страшные запросы)). Явно я не sqlщик. Скажите, а зачем так делают. Все данные в одной таблице. Лучше же таблицы разделить?
...
Рейтинг: 0 / 0
Таблица с разными наборами данных. Выборка
    #39848595
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol_butcherКакие страшные запросы)). Явно я не sqlщик. Скажите, а зачем так делают. Все данные в одной таблице. Лучше же таблицы разделить?

Это недоделанный вариант EAV модели хранения в РСУБД.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Таблица с разными наборами данных. Выборка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]