SQL Server-基于字符串值从一个表中选择数据
我想根据存储在另一个表中的varchar从我的一个数据库表中查找数据 我们有一个制造商表M和一个参数表p,而不是每个制造商都有一个参数,因为60%的制造商之间存在大量交叉,我们认为在需要时,每个制造商都有参数会更干净,而对于其他制造商,只需有一组默认参数 这意味着我无法在两个表中存储ManufacturerID并创建简单链接,而是需要使用ManufacturerName进行链接 因此,我需要知道是否可以通过ManufacturerName链接,以及在参数表p中没有匹配项的位置查找Manufacturer“Default” 作为链接的一部分,我们还包括: p.CategoryID=M.CategoryID和p.PriceFrom=M.BasePrice 以下是数据结构: 制造商M: 制造商ID、制造商名称、类别ID、基准价格 参数p 类别ID、制造商名称、价格来源、价格目标、百分比 以下是一些示例数据: 制造商M: 参数p: 所以我们仍然需要在每个链接中返回1个结果 非常感谢任何指导意见SQL Server-基于字符串值从一个表中选择数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想根据存储在另一个表中的varchar从我的一个数据库表中查找数据 我们有一个制造商表M和一个参数表p,而不是每个制造商都有一个参数,因为60%的制造商之间存在大量交叉,我们认为在需要时,每个制造商都有参数会更干净,而对于其他制造商,只需有一组默认参数 这意味着我无法在两个表中存储ManufacturerID并创建简单链接,而是需要使用ManufacturerName进行链接 因此,我需要知道是否可以通过ManufacturerName链接,以及在参数表p中没有匹配项的位置查找Manufact
提前感谢。根据您发布的条件,左侧加入应达到以下目的:
select M.ManufacturerID, P.ManufacturerName, M.CategoryID
from Manufacturers M
left join Parameters P On P.CategoryID = M.CategoryID AND (P.PriceFrom <= M.BasePrice AND P.PriceTo >= M.BasePrice)
如果我遗漏了一些内容,请在此处发布您的表格结构:没有可使用的表格结构是困难的,但在
SELECT m.name Manufacturer, p.name, p.value, p.Manufacturer alias
FROM Manufacturers m
INNER JOIN Parameter p ON (m.name = p.Manufacturer)
UNION ALL
SELECT m.name Manufacturer, p.name, p.value, p.Manufacturer alias
FROM Manufacturers m
LEFT JOIN Parameter p on p.Manufacturer = 'default'
WHERE m.name + p.name not in (SELECT m.name + p.name
FROM Manufacturers m
INNER JOIN Parameter p
ON (m.name = p.Manufacturer)
)
ORDER BY 1, 2
你可以得到你需要的。第一部分获取链接部分,第二部分仅获取尚未匹配的参数名称的默认值
这是一个包含少量数据的查询,查询结果是,这是我过度思考问题的另一种情况。 通过将以下Select语句嵌套在另一个Select语句中,我成功地实现了这一点:
(SELECT
TOP(1) Percentage
FROM
Parameters AS P
WHERE
P.CategoryID = R.CategoryID
AND (P.PriceFrom <= M.BasePrice AND P.PriceTo >= M.BasePrice)
AND (P.ManufacturerName = M.ManufacturerName OR P.ManufacturerName = 'Default')
ORDER BY
CASE WHEN P.ManufacturerName = 'Default' THEN 'ZZZZZ' ELSE P.ManufacturerName END
) AS Markup
非常感谢您的帮助。嗨。我看不出您是如何绕过ManufacturerName匹配问题的,或者选择“Default”是我的表结构和建议的数据是否正确,否则请使用您的更新。。我会根据这个更新我的答案!!你好请看更新的问题,希望这有点帮助
SELECT m.name Manufacturer, p.name, p.value, p.Manufacturer alias
FROM Manufacturers m
INNER JOIN Parameter p ON (m.name = p.Manufacturer)
UNION ALL
SELECT m.name Manufacturer, p.name, p.value, p.Manufacturer alias
FROM Manufacturers m
LEFT JOIN Parameter p on p.Manufacturer = 'default'
WHERE m.name + p.name not in (SELECT m.name + p.name
FROM Manufacturers m
INNER JOIN Parameter p
ON (m.name = p.Manufacturer)
)
ORDER BY 1, 2
(SELECT
TOP(1) Percentage
FROM
Parameters AS P
WHERE
P.CategoryID = R.CategoryID
AND (P.PriceFrom <= M.BasePrice AND P.PriceTo >= M.BasePrice)
AND (P.ManufacturerName = M.ManufacturerName OR P.ManufacturerName = 'Default')
ORDER BY
CASE WHEN P.ManufacturerName = 'Default' THEN 'ZZZZZ' ELSE P.ManufacturerName END
) AS Markup