有一个SQL查询,它需要将一个数字从用户输入匹配到多个列,然后再匹配到其他表上的列
我有一个查询,它接受用户上传的csv,并与我的sql表上的数字匹配。这是下面列出的。它工作正常,但我需要另一个查询来执行类似的操作 我现在需要一个选择(而不是更新)的查询。此查询将用于我的aspx页面。用户将输入零件号,然后我将显示与零件号匹配的公司以及所有其他详细信息。流程如所附图片所示 我已经尝试了很多方法来让它发挥作用。我已经做了很多研究,只是对sql不够精通,不足以把这些结合起来 这是用户上载其csv文件时使用的查询有一个SQL查询,它需要将一个数字从用户输入匹配到多个列,然后再匹配到其他表上的列,sql,sql-server,Sql,Sql Server,我有一个查询,它接受用户上传的csv,并与我的sql表上的数字匹配。这是下面列出的。它工作正常,但我需要另一个查询来执行类似的操作 我现在需要一个选择(而不是更新)的查询。此查询将用于我的aspx页面。用户将输入零件号,然后我将显示与零件号匹配的公司以及所有其他详细信息。流程如所附图片所示 我已经尝试了很多方法来让它发挥作用。我已经做了很多研究,只是对sql不够精通,不足以把这些结合起来 这是用户上载其csv文件时使用的查询 UPDATE imports SET imports.AMIPart
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是上面查询中的AMIPartNumber)
好的,像这样的
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
试试这个:
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]
)
我终于成功了。现在,无论用户搜索什么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
获取此错误时,无法绑定多部分标识符“JDB.OEMSubNumber”。无法绑定多部分标识符“JDB.OEMSubNumber2”。多部分标识符“JDB.OEMSubNumber2”无法绑定。@Bignadad-好的,我想我得到了所有的拼写错误。如果OEMPartNumber与OEMItem匹配,您的第一次代码游戏将产生结果,但是如果OEMSubNumber2或OEMSubNumber2与OEMItem匹配,则不会工作。现在尝试第二个查询在第二个查询上,似乎与另一个问题相反。只有OEMSubNumber与OEMItem匹配。OEMPartNumber与OEMItemi不匹配。我在microsoft sql server studio中尝试了此操作,但在上次选择时出错。说“必须声明标量变量@jdnoad,我自己在SSMS中模拟了它,发现@jd表引用周围需要一些方括号。希望这有帮助!