我见过类似的问题,但没有一个能够达到我想要的目的。
3个表:产品,计划,表现。
除了服务目的外,性能表代表了另外两个表之间的多对多关系。
让我们调用链接字段:
performance.PlanID = plan.PlanID
performance.ProductID = product.ProductID
有3个感兴趣的领域:
product.ProductName
plan.Status (Live or Pending)
performance.Capacity
我希望用以下结果编写一个选择查询:
ProductName
LiveCapacity
PendingCapacity
我在查询的FROM(SELECT ...)部分尝试了一个带有所需内连接的数据透视图,但我似乎无法做到正确。
答案 0 :(得分:0)
这样的查询结果是什么?
SELECT product.ProductName as Name, plan.Status as Status,
performance.Capacity as Capacity
FROM product, plan, performance
WHERE performance.PlanID <> plan.PlanID
AND performance.ProductID <> product.ProductID
;
答案 1 :(得分:0)
我建议您始终使用显式连接。
根据您的评论更新:
SELECT product.ProductName as Name
, plan.Status as Status
, SUM(performance.Capacity) as Capacity
FROM product
INNER JOIN plan
ON performance.PlanID = plan.PlanID
INNER JOIN performance
ON performance.ProductID = product.ProductID
GROUP BY product.ProductName
, plan.Status as Status
答案 2 :(得分:0)
透视示例。
SELECT
t.ProductName,
[Live] AS LiveCapacity,
[Pending] AS PendingCapacity
FROM
(
SELECT product.ProductName,
performance.Capacity,
plan.Status
FROM product
JOIN performance ON performance.ProductID = product.ProductID
JOIN plan ON performance.PlanID = plan.PlanID
) t
PIVOT (
SUM(Capacity)
FOR Status IN ([Live],[Pending])
) p
Non-Pivot示例
SELECT product.ProductName,
SUM(CASE WHEN plan.Status = 'Live' THEN performance.Capacity END) as LiveCapacity,
SUM(CASE WHEN plan.Status = 'Pending' THEN performance.Capacity END) as PendingCapacity
FROM product
JOIN performance ON performance.ProductID = product.ProductID
JOIN plan ON performance.PlanID = plan.PlanID
GROUP BY product.ProductName