在SQL中循环

在SQL中循环,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,下面的查询,我得到的项目,itemid,类别,数量,quantityadded,quantity total和它们可以是相同的项目在不同的位置 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

下面的查询,我得到的项目,itemid,类别,数量,quantityadded,quantity total和它们可以是相同的项目在不同的位置

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项目类别Loc1owned LOC1 ADDED LOC1总计loc2owned LOC2总计loc3owned LOC3总计(loc1toal+LOC2TOAL+loc3total)

因为之前的loc都是2013年的loc,所以我会有相同的LOC1所有权,LOC1总计,LOC2所有权。。。。。2012年也是如此,每个项目都是一行,以此类推

我的问题是如何在SQL中实现这一点。是否有一个循环…迭代…我对此相当陌生,因此非常感谢您的帮助

您可以尝试:

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)

除非我知道这一年的数据类型(和内容),否则我无法计算这一年的数据。

能否附上一些查询所用表格的屏幕截图?你希望达到的结果是什么?这将有助于更有效地回答您的问题。看起来您正在将日期存储在字符串列中。这是一个很大的禁忌。请改用Date、DateTime或DateTime2类型。