【发布时间】:2019-04-10 00:06:26
【问题描述】:
我有一个查询库存水平。我需要根据软件中提供的 CustomerID 变量过滤项目。项目和客户之间没有直接连接。但是,我在客户中有自定义字段,它定义了允许他们从哪些项目组购买(布尔值)。我在 Item 中还有一个自定义字段,用于确定它属于哪个组(字符串)。
我尝试使用交叉连接,但正如您所想象的那样,我在右侧得到了空白项目和数据,这是我不想要的。我没有其余的(库存检查)查询,此时我正在尝试根据组获取要为客户显示的项目。我已将实际字段替换为 Group1、Group2 等。请忽略括号。
SELECT Customers.CustomerNo,
Customers.CustomerID,
Customers.Name,
CASE
WHEN Customers.[Group1] = 1
AND Items.UserDefined1 = 'Group1'
THEN Items.ItemNo
WHEN Customers.Group2 = 1
AND Items.UserDefined1 = 'Group2'
THEN Items.ItemNo
WHEN Customers.[Group3] = 1
AND Items.UserDefined1 = 'Group3'
THEN Items.ItemNo
WHEN Customers.[Group4] = 1
AND Items.UserDefined1 = 'Group4'
THEN Items.ItemNo
WHEN Customers.Group5 = 1
AND Items.UserDefined1 = 'Group5'
THEN Items.ItemNo
WHEN Customers.[Group6] = 1
AND Items.UserDefined1 = 'Group6'
THEN Items.ItemNo
WHEN Customers.[Group7] = 1
AND Items.UserDefined1 = 'Group7'
THEN Items.ItemNo
WHEN Customers.[Group8] = 1
AND Items.UserDefined1 = 'Group8'
THEN Items.ItemNo
WHEN Customers.[Group9] = 1
AND Items.UserDefined1 = 'Group9'
THEN Items.ItemNo
WHEN Customers.Group10 = 1
AND Items.UserDefined1 = 'Group10'
THEN Items.ItemNo
WHEN Customers.Group11 = 1
AND Items.UserDefined1 = 'Group11'
THEN Items.ItemNo
ELSE ''
END AS ItemNo,
Items.Name AS Description,
Items.UserDefined1
FROM
(
SELECT Items_1.ItemNo,
Items_1.Name,
ItemsUserDefined.UserDefined1
FROM dbo.Items AS Items_1
INNER JOIN
(
SELECT UserDefined1,
OwnerID
FROM dbo.AdditionalInfo
WHERE(ModuleID = 12)
) AS ItemsUserDefined ON Items_1.ItemID = ItemsUserDefined.OwnerID
) AS Items
CROSS JOIN
(
SELECT Customers_1.CustomerNo,
Customers_1.Name,
Customers_1.CustomerID,
CustomerUserDefined.[Group1],
CustomerUserDefined.Group2,
CustomerUserDefined.[Group3],
CustomerUserDefined.[Group4],
CustomerUserDefined.Group5,
CustomerUserDefined.[Group6],
CustomerUserDefined.[Group7],
CustomerUserDefined.[Group8],
CustomerUserDefined.[Group9],
CustomerUserDefined.Group10,
CustomerUserDefined.Group11
FROM dbo.Customers AS Customers_1
INNER JOIN
(
SELECT UserDefined9 AS [Group1],
UserDefined10 AS Group2,
UserDefined11 AS [Group3],
UserDefined12 AS [Group4],
UserDefined13 AS Group5,
UserDefined14 AS [Group6],
UserDefined15 AS [Group7],
UserDefined16 AS [Group8],
UserDefined17 AS [Group9],
UserDefined18 AS Group10,
UserDefined20 AS Group11,
OwnerID
FROM dbo.AdditionalInfo AS AdditionalInfo_1
WHERE(ModuleID = 38)
) AS CustomerUserDefined ON Customers_1.CustomerID = CustomerUserDefined.OwnerID
) AS Customers
WHERE CustomerID = 472
【问题讨论】:
标签: tsql