Как выполнить запрос к серии пар значений и сохранить результаты во временной таблице? - PullRequest
0 голосов
/ 13 декабря 2011

Предположим, у меня есть массив значений:

(A1, a1, A2, a2, A3, a3, A4, a4 ​​....., An, an)

Как мне автоматизировать и выполнить приведенный ниже запрос TSQL для пар (A1, a1 ....., An, an)

SELECT COUNT (1)
FROM food
WHERE calories = Ai AND ingredient = ai --i = {1..n}

, чтобы каждый счетчик получал (Ai, ai) {i =1..n} будет храниться во временной таблице?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Вставьте значения в вашем массиве во временную таблицу (я собираюсь использовать то же самое для результатов позже):

create table #pairs (
    calories    varchar(50),
    ingredient  varchar(50),
    count       int
)

Затем мы можем получить наш результат за один шаг:

UPDATE p
SET count = x.count
FROM #pairs p inner join
    (   SELECT f.calories, f.ingredient, COUNT(*) as count
        FROM food f inner join
            #pairs p ON f.calories = p.calories and f.ingredient = p.ingredient
        GROUP BY f.calories, f.ingredient
    ) x ON p.calories = x.calories and p.ingredient = x.ingredient


select * from #pairs
1 голос
/ 13 декабря 2011

Вы можете сделать это с помощью Dynamix SQL, примерно так:

declare @count int, @limit int
select @count = 0, @limit = 5 -- limit is n

declare @sqlcmd varchar(300)

-- table
create table #result (
combination varchar(10),
total int
)

while @count < @limit
begin
  select @sqlcmd = 'insert into #results select distinct "(" + ingredient + "," + calories + ")", count(*) from food where calories = A' + convert(varchar, @count) + ' and ingredient = a' + convert(varchar, @count)

  exec(@sqlcmd)

  select @count = @count + 1
end
...