SQL选择WHERE参数作为替代字符串

时间:2015-11-10 04:42:13

标签: sql select parameters where

我是一个新手,并试图在谷歌找到答案,但我认为我缺乏正确的术语来找到我需要的答案。

我有一个SQL Select语句,它从我们的报价包中的报价中返回一个物料清单。报价都包含具有单独BOM的单个项目。

目前,我可以使用单个语句返回报价中所有项目的BOM。我希望能够做的是让用户能够从选择中过滤某些项目。

例如,引用包含项目1 - 10(QI.QTE_POS是项目编号)。当前查询返回整个报价的BOM。新功能将使用一串项目编号仅返回字符串中项目的BOM(以逗号分隔)。

例如string items = 1,2,6,7,9;

SELECT
  QI.QTE_POS AS 'ITEM_NUM',
  QI.DESCR AS 'ITEM',   
  BF.EMARK,
  F.FILL_CODE,
  F.DESCR,
  SUM(BF.FILL_COUNT) AS FILL_COUNT,
  CAST(ROUND(BF.FILL_HEIGHT * 25.4, 2) AS REAL) AS FILL_HEIGHT,
  CAST(ROUND(BF.FILL_WIDTH * 25.4, 2) AS REAL) AS FILL_WIDTH,
  BF.RECTANGULAR,
  S.SUPP_CODE

FROM
  QUOTE_ITEM QI
INNER JOIN BOM_FILL BF ON QI.QUOTE_ITEM_ID = BF.QUOTE_ITEM_ID
INNER JOIN FILL F ON BF.FILL_LIB_ID = F.FILL_LIB_ID AND BF.FILL_ID = F.FILL_ID
INNER JOIN SUPPLIER S ON F.SUPP_LIB_ID = S.SUPP_LIB_ID AND F.SUPP_ID = S.SUPP_ID
INNER JOIN QUOTE Q ON Q.QUOTE_ID = QI.QUOTE_ID

WHERE
  BF.COST_BY_BOM = 'T' AND
  Q.QUOTE_NUM = @QuoteNum AND
  Q.QUOTE_VERS = @QuoteVers AND
  QI.QUOTE_VERS_START <= @QuoteVers AND 
  QI.QUOTE_VERS_STOP >= @QuoteVers AND
  Q.QUOTE_NUM_PREF = @QuotePref AND
  Q.QUOTE_NUM_SUFF = @QuoteSuff

GROUP BY
  QI.DESCR,
  QI.QTE_POS,
  BF.EMARK,
  F.FILL_CODE,
  F.DESCR,
  BF.FILL_HEIGHT,
  BF.FILL_WIDTH,
  BF.RECTANGULAR,
  S.SUPP_CODE

ORDER BY
  F.DESCR,
  QI.DESCR,
  QI.QTE_POS,
  F.FILL_CODE,
  FILL_HEIGHT,
  FILL_WIDTH

QI.QTE_POS是我想要过滤的项目编号。

要手动执行此操作,伪代码将为:

Where QI.QTE_POS = 1 OR 2 OR 6 or 7 OR 9

我不知道如何使用参数执行此操作但是??

提前感谢您提供的任何帮助!

威尔

1 个答案:

答案 0 :(得分:0)

我想我找到了我正在寻找的答案。如果这是最佳做法,你能告诉我吗?

如果我将以下代码添加到where语句中,它似乎只返回其QTE_POS匹配1 3或4的项目编号的玻璃

QI.QTE_POS IN (1,3,4)

任何反馈都会很棒!

干杯,

威尔