首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >T-SQL交叉连接以获取缺少的值

T-SQL交叉连接以获取缺少的值
EN

Stack Overflow用户
提问于 2013-01-05 03:08:08
回答 2查看 2.1K关注 0票数 4

下面是我的问题的一个简单示例。我有一个存储的proc来创建一个报告。

代码语言:javascript
运行
复制
DECLARE @Report TABLE
(Product VARCHAR(10),
Purchases MONEY default (0) 
)
DECLARE @Range TABLE
(minP MONEY,
maxP MONEY,
Descrip VARCHAR(50)
)

INSERT @Range
VALUES(0,1,'0-1'),
(2,5,'2-5'),
(6,10,'6-10')

INSERT @Report(Product, Purchases)
VALUES('A',1),
('A',5),
('B',10)


SELECT r.Product, r.Purchases, x.Descrip  
FROM @Report r CROSS JOIN @Range x 
WHERE r.purchases BETWEEN x.minp AND x.maxp

结果如下所示:

代码语言:javascript
运行
复制
Product Purchases   Descrip
A   1.00    0-1
A   5.00    2-5
B   10.00   6-10

如何才能使结果如下所示:

代码语言:javascript
运行
复制
Product Purchases   Descrip
A   1.00    0-1
A   5.00    2-5
A   0   6-10
B   0   0-1
B   0   2-5
B   10.00   6-10
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-05 03:21:14

您可以尝试如下所示:

  • 交叉联接产品的不同列表,其范围可获取每个product)

。将此交叉联接列表与原始报表原始数据联接以填写采购数据。

  • 连接关系将与原始where子句(加上链接product)

)的逻辑相同

示例查询

代码语言:javascript
运行
复制
SELECT
  r2.Product,
  coalesce(r.Purchases, 0) as Purchases,
  x.Descrip  
FROM 
  (select distinct Product from @Report) r2 CROSS JOIN @Range x
    left join @Report r on r.purchases BETWEEN x.minp AND x.maxp
                        and r.product = r2.product

示例输出():

代码语言:javascript
运行
复制
| PRODUCT | PURCHASES | DESCRIP |
---------------------------------
|       A |         1 |     0-1 |
|       A |         5 |     2-5 |
|       A |         0 |    6-10 |
|       B |         0 |     0-1 |
|       B |         0 |     2-5 |
|       B |        10 |    6-10 |

我假设您的实际数据比这复杂得多。例如,如果在一个范围内有多个购买,我不确定您期望的结果是什么。但这至少应该能让你开始。

票数 3
EN

Stack Overflow用户

发布于 2013-01-05 03:20:46

这应该可以做到:

代码语言:javascript
运行
复制
SELECT B.Product, ISNULL(C.Purchases,0) Purchases, A.Descrip
FROM @Range A
CROSS JOIN (SELECT DISTINCT Product
            FROM @Report) B
LEFT JOIN @Report C
    ON B.Product = C.Product 
    AND C.Purchases BETWEEN A.minP AND A.maxP
ORDER BY B.Product, Purchases

Here is a demo供您尝试。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14163312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档