繁体   English   中英

根据SQL Server中的条件对组进行交叉连接

[英]Cross join on a group based on the condition in SQL Server

我有物品和考试表 -

在此输入图像描述

我的愿望结果 -

在此输入图像描述

我尝试了很多,但我无法根据代码组将Exam表连接到Item表。

是否有可能为这两个表交叉连接或任何其他连接以获得期望的结果?

我没有看到生成丢失数据的方法。 日历表方法是将所有代码与所有考试交叉加入。 然后,将此表连接到Item并按顺序获取所需的结果:

WITH cte AS (
   SELECT *
   FROM (SELECT DISTINCT Code FROM Item) AS C
   CROSS JOIN Exam
)
SELECT
    t1.Code,
    t2.Item,
    t1.Exam
FROM cte t1
LEFT JOIN Item t2
    ON t1.Code = t2.Code AND
       t1.Exam = t2.Exam
ORDER BY
    t1.Code,
    CASE WHEN t2.Item IS NOT NULL THEN 0 ELSE 1 END,
    t1.Exam

在这里演示:

Rextester

这应该产生你需要的东西。 我正在使用UNION来组合CROSS JOIN和项表,然后分组以确保删除NULL。

SELECT code, max(item) as item, exam
FROM 
(SELECT distinct i.code, null as item, e.exam FROM exam e cross join item i
union all
SELECT code, item, exam
FROM item) u
group by code, exam
order by code, exam

你可以试试这个

SELECT A.Code, i.Item, A.Exam
FROM
(
SELECT Code,e.Exam
FROM Item i
CROSS JOIN Exam e
GROUP BY Code,e.Exam
) A
LEFT JOIN Item i ON i.Code= A.Code AND i.Exam = A.Exam

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM