0

我有一个查询,它接受用户上传的 csv 并匹配我的 sql 表上的数字。这在下面列出。它工作正常,但我需要另一个查询来做类似的事情。

我现在需要一个选择(而不是更新)的查询。此查询将在我的 aspx 页面上使用。用户将输入一个零件号,然后我会显示我的公司匹配零件号以及所有其他详细信息。流程如附图所示。

我已经尝试了很多事情试图让它发挥作用。我已经研究了很多,只是对 sql 的了解不够,无法将这些放在一起。

这是用户上传 csv 文件时有效的查询

UPDATE imports 
SET imports.AMIPartNumber = 
coalesce(AMIA.Item,AMIB.Item,AMIC.Item,AMID.Item,AMIE.Item), 
Imports.AMIDescription = 
coalesce(AMIA.Description,AMIB.Description,AMIC.Description,AMID.Description,AMIE.Description) 
FROM imports as I 
LEFT JOIN JD as JDA 
ON I.OEMPartNumber = JDA.OEMPartNumber 
LEFT JOIN amipartnumbers as AMIA 
ON JDA.OEMPartNumber = AMIA.OEMItem 
LEFT JOIN JD as JDB 
ON I.OEMPartNumber = JDB.OEMSubNumber 
LEFT JOIN amipartnumbers as AMIB 
ON JDB.OEMSubNumber = AMIB.OEMItem 
LEFT JOIN JD as JDC 
ON I.OEMPartNumber = JDC.OEMSubNumber2 
LEFT JOIN amipartnumbers as AMIC 
ON JDB.OEMSubNumber2 = AMIC.OEMItem 
LEFT JOIN JD as JDD 
ON I.OEMPartNumber = JDD.OEMSubNumber3 
LEFT JOIN amipartnumbers as AMID 
ON JDB.OEMSubNumber2 = AMID.OEMItem 
LEFT JOIN JD as JDE 
ON I.OEMPartNumber = JDE.OEMSubNumber4 
LEFT JOIN amipartnumbers as AMIE 
ON JDB.OEMSubNumber2 = AMIE.OEMItem ;

select * from imports

这是我试图做的事情的流程(图片中的 AMI 是上面查询中的 amipartnumbers) 流动

4

3 回答 3

1

好的,像这样的吗?

SELECT *
FROM JD AS JDA
LEFT JOIN amipartnumbers as AMIA ON JDA.OEMPartNumber = AMIA.OEMItem 
LEFT JOIN amipartnumbers as AMIB ON JDA.OEMSubNumber = AMIB.OEMItem 
LEFT JOIN amipartnumbers as AMIC ON JDA.OEMSubNumber2 = AMIC.OEMItem 
LEFT JOIN amipartnumbers as AMID ON JDA.OEMSubNumber3 = AMID.OEMItem 
LEFT JOIN amipartnumbers as AMIE ON JDA.OEMSubNumber4 = AMID.OEMItem 
WHERE OEMPartNumber = @userInput
   OR OEMSubNumber = @userInput
   OR OEMSubNumber2 = @userInput
   OR OEMSubNumber3 = @userInput
   OR OEMSubNumber4 = @userInput

或者您只想参加比赛?我会这样做:

  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMPartNumber = A.OEMItem 
  WHERE JD.OEMPartNumber = @userInput
UNION ALL 
  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMSubNumber = A.OEMItem 
  WHERE JD.OEMSubNumber = @userInput
UNION ALL 
  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMSubNumber2 = A.OEMItem 
  WHERE JD.OEMSubNumber2 = @userInput
UNION ALL 
  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMSubNumber3 = A.OEMItem 
  WHERE JD.OEMSubNumber3 = @userInput
UNION ALL 
  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMSubNumber4 = A.OEMItem 
  WHERE JD.OEMSubNumber4 = @userInput
于 2013-05-24T02:14:29.753 回答
1

尝试这个:

DECLARE @jd TABLE (
   [OEMPartNumber] int, 
   [OEMSubNumber] int, 
   [OEMSubNumber2] int,
   [OEMSubNumber3] int
)

INSERT INTO @jd
   SELECT [OEMPartNumber], [OEMSubNumber], [OEMSubNumber2], [OEMSubNumber3]
   FROM [JD]
   WHERE 
      [OEMPartNumber] = @enterNumber OR
      [OEMSubNumber] = @enterNumber OR
      [OEMSubNumber2] = @enterNumber OR
      [OEMSubNumber3] = @enterNumber

SELECT ami.[Item], ami.[Description] FROM [AMI] ami
   JOIN @jd ON (
      ami.[OEMItem] = [@jd].[OEMPartNumber] OR
      ami.[OEMItem] = [@jd].[OEMSubNumber] OR
      ami.[OEMItem] = [@jd].[OEMSubNumber2] OR
      ami.[OEMItem] = [@jd].[OEMSubNumber3]
   )
于 2013-05-24T02:20:34.427 回答
0

我终于得到了这个工作。现在无论用户搜索 OEMPartNumber、OEMSubNumber、OEMSubNumber2 等,它都会匹配 OEMItem 并带回 AMI.Item

这种交叉应用技术成功了。而且它很快。只需几秒钟即可返回结果

declare @Seek as varchar(20)
set @seek = '" & enterNumber & "'

select
*
from amipartnumbers as APN 
left join (
            select *
            from JD
            cross apply (
                values 
                 (1, OEMPartNumber )
                ,(2, OEMSubNumber )
                ,(3, OEMSubNumber2)
                ,(4, OEMSubNumber3)
                ,(5, OEMSubNumber4)
              ) as xapply (lvl, OEMRef)
           ) JDT on APN.OEMItem = JDT.OEMRef
where OEMPartNumber = @Seek
or OEMSubNumber    = @seek
or OEMSubNumber2   = @seek
or OEMSubNumber3   = @seek
or OEMSubNumber4   = @seek
于 2013-05-24T12:29:50.593 回答