在where子句中使用变量参数查询SQL

时间:2017-07-21 07:13:52

标签: sql sql-server database

我有一个SQL查询,允许我做一些计算。 如何为ICT_AOI表中的每个ItemCode运行该特定查询,而不必手动填写每个ItemCode?

例如,不是仅计算1个项目代码,而是计算表格的所有行

最后,例如,我想要:

B0016 | 0.777,

B0017 | 0.645,

B412 | 0.8545,

B568 | 0.1412,

等...

这是我的代码:

SELECT 
    (COUNT(ProgCode)/pICT) AS ICT, ItemCode  
FROM 
    FailOnly, ICT_AOI 
WHERE 
    Machine = 'Seica' 
    AND ProgCode = '3' 
    AND ItemCode = 'B001608AArev9' 
    AND Side = 'A' 
GROUP BY 
    pICT, ItemCode

由于我的WHERE规范,该代码返回正确的结果但是针对一个特定的行。 机器,ProgCode在表中。 Side,ItemCode,pICT在另一个表中。它们中的两个可以通过以下方式链接:table1.ItemCode = table2.BoardName。

2 个答案:

答案 0 :(得分:1)

如果我理解您的意思,那么您可以使用OUTER APPLY

来完成此操作

基本上,这将从ITC_AO1表中选择所有不同的ItemCodes,并将查询应用于它。只要检查连接是否在正确的条件和where子句,如果你每次都指定机器,progcode和side,或者那是一个真正的过滤器,我就无法解决。

如果这对您没有帮助,那么我需要在每个表中看到一个信息示例,并且示例结果显示您想要包含的内容,而不是重复等。

SELECT * FROM
    (
    SELECT DISTINCT ItemCode 
    FROM
    ITC_AOI
    ) as a

    OUTER APPLY 

    (
    SELECT 
    (COUNT(ProgCode)/pICT) AS ICT, ItemCode  
    FROM FailOnly as b
    LEFT OUTER JOIN ICT_AOI as c
    ON b.BoardName = c.ItemCode
    WHERE Machine = 'Seica' 
    AND ProgCode = '3' 
    AND a.ItemCode = c.ItemCode 
    AND Side = 'A' 
    GROUP BY pICT, ItemCode
    ) as b

答案 1 :(得分:0)

我找到了解决方案。

这是我的代码:

SELECT ItemCode, (SELECT COUNT(ProgCode)/pICT FROM FailOnly ct WHERE ct.BoardName = tc.ItemCode) as namecounter FROM ICT_AOI tc 

子查询允许我绕过组,因此对每行进行计算。