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

Откуда:
Сообщений: 12
Здравствуйте. Столкнулся с базой и никак не могу сообразить как сделать нужный мне запрос
Есть база данных

ID Name Value
1 a 1
1 b 2
1 c 3
2 a 5
2 b 6
2 c 7

Нужно что бы запрос вывел значение поля value для двух значений поля Name (a и b)

ID Name_a Name_b
1 1 2
2 5 6
26 фев 14, 11:53    [15631244]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
uaggster
Member

Откуда:
Сообщений: 866
r@dius,
А что в столбце Name_a должно быть выведено в случае:

1 a 1
1 b 2
1 a 3

?
26 фев 14, 11:57    [15631280]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
r@dius
Member

Откуда:
Сообщений: 12
ID Name_a Name_b
1 1 2
26 фев 14, 11:59    [15631300]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
uaggster
Member

Откуда:
Сообщений: 866
r@dius
ID Name_a Name_b
1 1 2


ID Name_a = 1 в случае когда
1 a 1
1 b 2
1 a 3

Это первое или минимальное значение?
Обрати внимание, для ID 1 a бывает и 1 и 3!
26 фев 14, 12:16    [15631456]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
еще 20 постов и поймеме что надо ТС :)
26 фев 14, 12:16    [15631467]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Maxx
еще 20 постов и поймеме что надо ТС :)
Гыы... всего-то надо
select * from таблица
pivot(max(value)for name in (a,b))p
26 фев 14, 12:20    [15631512]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
WITH T AS(SELECT * FROM(VALUES
 (1,'a',1)
,(1,'b',2)
,(1,'c',3)
,(2,'a',5)
,(2,'b',6)
,(2,'c',7)
)T(ID,Name,Value))
SELECT T.ID,a.Value,b.Value
FROM(SELECT DISTINCT ID FROM T) T
CROSS APPLY(SELECT TOP(1) Value FROM T TT WHERE TT.ID=T.ID AND Name='a'ORDER BY TT.Value) a
CROSS APPLY(SELECT TOP(1) Value FROM T TT WHERE TT.ID=T.ID AND Name='b'ORDER BY TT.Value) b;
26 фев 14, 12:21    [15631525]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Cygapb-007,

рано радутетесь :) Сейчас будет и с ,d,e :)
26 фев 14, 12:21    [15631526]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
uaggster
Member

Откуда:
Сообщений: 866
iap
WITH T AS(SELECT * FROM(VALUES
 (1,'a',1)
,(1,'b',2)
,(1,'c',3)
,(2,'a',5)
,(2,'b',6)
,(2,'c',7)
)T(ID,Name,Value))
SELECT T.ID,a.Value,b.Value
FROM(SELECT DISTINCT ID FROM T) T
CROSS APPLY(SELECT TOP(1) Value FROM T TT WHERE TT.ID=T.ID AND Name='a'ORDER BY TT.Value) a
CROSS APPLY(SELECT TOP(1) Value FROM T TT WHERE TT.ID=T.ID AND Name='b'ORDER BY TT.Value) b;


Эээ... Outer apply :)?
26 фев 14, 12:32    [15631626]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
uaggster
Member

Откуда:
Сообщений: 866
Хотя может быть автор жаждет банального:
Select ID, Min(Case when Name='a' then [Value] Else Null End) Name_a
Min(Case when Name='b' then [Value] Else Null End) Name_b
From tbl
Group by ID

?
26 фев 14, 12:38    [15631663]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
uaggster
iap
WITH T AS(SELECT * FROM(VALUES
 (1,'a',1)
,(1,'b',2)
,(1,'c',3)
,(2,'a',5)
,(2,'b',6)
,(2,'c',7)
)T(ID,Name,Value))
SELECT T.ID,a.Value,b.Value
FROM(SELECT DISTINCT ID FROM T) T
CROSS APPLY(SELECT TOP(1) Value FROM T TT WHERE TT.ID=T.ID AND Name='a'ORDER BY TT.Value) a
CROSS APPLY(SELECT TOP(1) Value FROM T TT WHERE TT.ID=T.ID AND Name='b'ORDER BY TT.Value) b;



Эээ... Outer apply :)?
Хто ж его знает!
26 фев 14, 12:55    [15631860]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
r@dius
Member

Откуда:
Сообщений: 12
Видимо я неправильно написал задачу.((
Постараюсь более подробнее задачу описать.
Есть база с такое структурой (данные в данном случае не играют никакой роли)

ID Name Value
1 Number  1
1 Device   20
1 Potr      12689
2 Number  2
2 Device   29
2 Potr      15255

Задача заключается в том что бы для одного ID в виде таблице вывести значение value для полей Number, device в колонке Name

ID Name_number Name_device
1           1              20
2           2              29 


Надеюсь лучше объяснил задачу.
26 фев 14, 13:04    [15631947]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
uaggster
Member

Откуда:
Сообщений: 866
r@dius, )

Ты ничего не добавил :)
Еще раз спрашиваем. В случае если для одного ИД в таблице присутствует несколько разных значений Device или Potr - как обработать данную ситуацию?

1 Number 1
1 Device 20
1 Potr 12689
1 Number 1
1 Device 21
1 Potr 12690
1 Number 3
1 Device 22
1 Potr 12677

Для большинства возможных вариантов поведения запросы члены клуба уже написали :)
26 фев 14, 13:24    [15632091]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
r@dius
Member

Откуда:
Сообщений: 12
Несколько разных значений Device или Potr для одного ID такой ситуации не будет.
26 фев 14, 13:32    [15632156]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
r@dius
Member

Откуда:
Сообщений: 12
ID Name Value
1 Number  1
1 Device   20
1 Potr      12689
2 Number  2
2 Device   29
2 Potr      15255



ID Name_number    Device_value
1           1              20
2           2              29 
26 фев 14, 13:37    [15632208]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
r@dius, 15631512
26 фев 14, 13:41    [15632236]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
r@dius,

вы уже все предложенные выше варианты перепробовали ?
26 фев 14, 13:41    [15632240]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Веrd
Member

Откуда: Лазаревское
Сообщений: 575
Задача сформулирована eбaнyтo.

Сформулируйти задачу нормально хотя бы у себя в голове - возможно сможете решить её без нашей помощи.

И да, попробуйте использовать GROUP BY и JOIN
26 фев 14, 21:16    [15635824]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить