Прошу прощения, что этот вопрос не помечен лучше, я не знаю, как описать без примера. Вот чего я пытаюсь достичь.Рекурсивный SQL-подвыбор SQL
Мой Упрощенное данных:
ID ParamName ParamValue
-----------------------
1 'Item Code' '100'
1 'Amount' '.99'
2 'Item Code' '555'
2 'Amount' '1.99'
2 'Item Code' '200'
2 'Amount' '2.99'
2 'Item Code' '221'
2 'Amount' '.89'
Мне нужно написать запрос, чтобы вернуть данные в 2 колонки, как, например (если несколько значений для одного ID, предположим, что запись кодов и суммы совпадают в том порядке, они приведены в таблице):
ItemCode Amount
-----------------------
'100' '.99'
'555' '1.99'
'200' '2.99'
'221 '.89'
Это ближайший я могу прийти, но при наличии нескольких кодов товара с тем же ID я не хочу, чтобы сгруппировать их с Максом() и Sum(). Я предполагаю, что существует какая-то рекурсия, но я даже не знаю, с чего начать исследования.
select
(Select Max(ParamValue) from EventDetail where id = base.id and ParamName = 'Item Code') as ItemCode,
(Select Sum(ParamValue) from EventDetail where id = base.id and ParamName = 'Amount') as Amount
from
(
select distinct id from EventDetail
) base
SQL Скрипки: http://sqlfiddle.com/#!2/09b773/1/0
Спасибо за просмотр!
Там в настоящее время, кажется, не быть способом, чтобы понять, что строка 3 идет с строкой 4, строкой 5 идет со строкой 6 и т. д. Есть ли любой другой столбец в таблице? Если нет, я не знаю, что это разрешимо предсказуемым и детерминированным способом - такие вещи, как добавление индекса, могут изменить способ, которым SQL Server будет определять порядок упорядочивания этих строк. –
К сожалению, нет другого столбца, который бы связывал строки вместе. В это время я должен сделать предположение, что они были вставлены последовательно (поверьте, мне это тоже не нравится). Вы правы, изменение индекса может полностью испортить это. – koolaide
Вам необходимо исправить модель данных, извините или переставить эту информацию на клиенте, сделав то же предположение, что порядок, в котором находятся строки, не изменится. Не существует способа выразить то, что вы хотите, реляционным способом - таблица представляет собой неупорядоченный пакет строк, по определению. Вы не можете делать какие-либо предположения о «вставленном последовательно» - это не так, как работает реляционная база данных (но вы можете уйти с ней в таких игрушках, как Access). –