所以我知道这可能看起来有点荒谬,但我正在做一个查询进行查询。问题是我需要说
的部分 ((transactions.amt_paid WHERE item_no = @item_no - SUM(transactions.amt_paid WHERE item_no IN (SELECT item_no = @items))
向我展示总数,但我如何在这里做总结?希望这是有道理的。
DECLARE @aracct VARCHAR(12)
SET @aracct = '49947368'
DECLARE @item_no VARCHAR(12)
SET @item_no = '2081'
SELECT tran_id, *
FROM transactions
WHERE account = @aracct AND item_no = @item_no
DECLARE @itemtable TABLE (items VARCHAR(6))
INSERT INTO @itemtable VALUES ('2735')
INSERT INTO @itemtable VALUES ('2737')
SELECT 'UPDATE transactions' + CHAR(13) + CHAR(9) + 'SET amt_paid = ' + '''' + (transactions.amt_paid WHERE item_no = @item_no - SUM(transactions.amt_paid WHERE item_no IN (SELECT item_no = @items)) +
'''' + ' WHERE aracct = ' + '''' + (SELECT @aracct) + '''' + ' AND item_no = ' + '''' + (SELECT @item_no) + ''''
答案 0 :(得分:0)
(在下面,看看你的语法,我假设你在Sql Server上)
你所问的是动态sql,你绝对可以做到。 “进行查询的查询”在高级用例中非常常见。
但是,您的要求不是高级用例。
我假设您想要求和item_no等于@item_no的行,并且您想要减去item_no在IN @items中的位置。 如果我错了,请纠正我。
所以,让我们先处理这个第一项任务。
Select SUM(CASE
When (item_no = @item_no) THEN amt_paid
When (item_no IN (SELECT items FROM @itemtable)) THEN -amt_paid END) TheAmount
FROM transactions
WHERE (item_no = @item_no) OR (item_no IN (SELECT items FROM @itemtable))
YAY!现在,如果这按预期工作,我们有一个返回值的查询。 我们可以这样做:
UPDATE transactions
SET amt_paid = (... the previous query ...)
WHERE aracct = @aracct AND item_no = @item_no
完成,没有动态查询。 如果需要打印查询,可以使用前面的SELECT为另一个变量赋值,然后生成查询。 如果你真的需要查询,我可以进一步详细说明。
编辑:嗯,如果没有一些额外的信息,帮助并不容易,但可能Sql抱怨选择里面的最大值(...)
尝试以这种方式重写Select:
Select SUM(CASE
When (T.item_no = @item_no) THEN T.amt_paid
When (IT.items IS NOT NULL) THEN -amt_paid END) TheAmount
FROM transactions T
LEFT JOIN @itemtable IT ON IT.items = T.item_no
WHERE (item_no = @item_no) OR (item_no IN (SELECT items FROM @itemtable))
如果您仍有问题,请详细说明您的错误。