2012-08-16 43 views
2

SQL Server初學者在這裏。我在SELECT/UPDATE語句中遇到了一些麻煩。我有一個包含訂單號列和行號列的表格。下面的select語句返回我想要的值。我想取得結果並將該號碼插入到訂單號匹配的同一張表中的一列中。我在想這個嗎?或者也許在考慮複雜性? :)SELECT Aggregate and UPDATE - SQL Server

SELECT 
    ORDNUM, COUNT(LINNUM) AS 'CountLines' 
    FROM [TableName] 
    WHERE STS = '3' AND DUEQTY < ONHAND AND STYPE = 'CU' 
    GROUP BY ORDNUM 

    UPDATE [TableName] 
    SET LNCNT = 'CountLines' 
    WHERE ORDNUM = ORDNUM 

在此先感謝您。 Ben

更新:我在下面使用Andomars解決方案,它工作得很好。謝謝大家的幫助。

+0

提示:當您與您正在使用的數據庫軟件的版本標記SQL問題,它可以幫助幫手。 – HABO 2012-08-16 15:35:33

回答

6

使用SQL Server語法:

update tn 
set  LNCNT = SubQuery.CountLines 
from TableName as tn 
join (
     select ordnum 
     ,  count(linnum) as CountLines 
     from TableName 
     where sts = '3' 
       and DUEQTY < ONHAND 
       and STYPE = 'CU' 
     group by 
       ordnum 
     ) as SubQuery 
on  SubQuery.ordnum = tn.ordnum 
+0

哇,謝謝。正是我在找什麼。 – 2012-08-16 17:38:04

1

以下應爲SQL Server的工作:

with counts as 
(
    SELECT 
    ORDNUM, COUNT(LINNUM) AS 'CountLines' 
    FROM [TableName] 
    WHERE STS = '3' AND DUEQTY < ONHAND AND STYPE = 'CU' 
    GROUP BY ORDNUM 
) 

    UPDATE tn 
    SET tn.LNCNT = c.CountLines 
    FROM TableName tn 
    INNER JOIN counts as c 
    ON tn.OrderNum = c.OrderNum 
0

如果您在MS SQL你試過申報。

DECLARE @countlines INT 
SET @countlines = SELECT COUNT(LINNUM) FROM [AdvPickTicket] WHERE STS = '3' 
AND DUEQTY < ONHAND AND STYPE = 'CU' GROUP BY ORDNUM 
UPDATE [TableName] 
SET LNCNT = @countlines 
WHERE ORDNUM = ORDNUM 
+0

謝謝,阿里。當我嘗試這種方法時,我收到一個錯誤。 - 「子查詢返回的值超過1,當子查詢跟隨=,!=,<, <= , >,> =或子查詢用作表達式時,這是不允許的。 – 2012-08-16 17:22:28

0

試試這個

UPDATE [tablename] 
SET LNCNT = abb.CountLines 
FROM (SELECT 
    ORDNUM, COUNT(LINNUM) AS 'CountLines' 
    FROM [TableName] 
    WHERE STS = '3' AND DUEQTY < ONHAND AND STYPE = 'CU' 
    GROUP BY ORDNUM) AS abb