通过位置循环SQL

时间:2013-01-30 04:23:56

标签: sql sql-server sql-server-2008 tsql

我的以下查询获取的项目,itemid,类别,数量,数量添加,数量总计及其在不同位置可以是相同的项目。

SELECT
    it.itemno,
    it.item,
    c.category,
    q.owned,
    q.added,
    (q.owned + q.added) AS total,
    (q.owned * it.cost) AS Tcost
FROM item it
INNER JOIN phiq     q  ON it.itemlid = q.itemlid
INNER JOIN category c  ON c.catid = it.catid
WHERE q.locationid = '12653'
  AND q.qdate LIKE '%2013%'

由于将有三个不同的位置,我将需要在不同的位置运行此查询3次。还有几年这是2013年,但我应该能够运行这个也为2012年再次比较3个位置然后对于每个项目,我需要每个位置的总数,例如:

ITEMID ITEM类别Loc1owned Loc1added loc1total loc2owned loc2total loc3owned loc3added loc3total TOTAL(loc1toal + loc2total + loc3total)

由于之前的loc将全部用于2013年,我将拥有相同的(loc1owned,loc1total,loc2owned).....对于2012年,每个项目都将为1行,依此类推。

我的问题是如何在SQL中执行此操作。有一个循环....迭代...我相当新的这样的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你可以尝试:

SELECT  q.locationid, it.itemno,it.item,c.category,q.owned
        ,q.added,(q.owned+q.added) as total, (q.owned*it.cost) as Tcost 
FROM    item it
        INNER JOIN phiq q on it.itemlid= q.itemlid
        INNER JOIN category c on c.catid=it.catid
WHERE   q.locationid IN ('12653', 'anotherlocation', 'nextlocation')
        AND (q.qdate LIKE '%2013%')
GROUP BY    q.locationid, it.itemno,it.item,c.category,q.owned,q.added
            ,(q.owned+q.added), (q.owned*it.cost)

除非我知道它(和内容)的数据类型是什么,否则我不能做年份。