4 个解决方案
#1
union应该是最直观的了,
case when 也是能够满足需求的,表结构,和测试数据不贴出来的话,可以自己百度一下怎么写,这样可以加深自己的理解
case when 也是能够满足需求的,表结构,和测试数据不贴出来的话,可以自己百度一下怎么写,这样可以加深自己的理解
#2
--测试数据
--表A
IF OBJECT_ID('tempdb..#tabA') IS NOT NULL
DROP TABLE #tabA
CREATE TABLE #tabA(
id int IDENTITY(1,1),
NAME VARCHAR(20),
)
INSERT INTO #tabA
SELECT '求佛' union all
SELECT '老鼠爱大米'
--表B
IF OBJECT_ID('tempdb..#tabB') IS NOT NULL
DROP TABLE #tabB
CREATE TABLE #tabB(
id int IDENTITY(1,1),
NAME VARCHAR(20),
)
INSERT INTO #tabB
SELECT '周杰伦专辑' union all
SELECT '梁静茹专辑'
--表C
IF OBJECT_ID('tempdb..#tabC') IS NOT NULL
DROP TABLE #tabC
CREATE TABLE #tabC(
id int,
[TYPE] VARCHAR(5),
dt DATETIME
)
INSERT INTO #tabC
SELECT 1,'1',GETDATE() UNION ALL
SELECT 2,'1',GETDATE() UNION ALL
SELECT 1,'2',GETDATE() UNION ALL
SELECT 2,'2',GETDATE()
--测试数据结束
;WITH cte AS (
SELECT t1.*,t2.NAME FROM #tabC t1
INNER JOIN #tabA t2 ON t1.id=t2.id
WHERE t1.[TYPE]='1'
UNION ALL
SELECT t1.*,t2.NAME FROM #tabC t1
INNER JOIN #tabB t2 ON t1.id=t2.id
WHERE t1.[TYPE]='2'
)
SELECT * FROM cte ORDER BY dt
id TYPE dt NAME
----------- ----- ----------------------- --------------------
1 1 2017-10-23 16:46:35.647 求佛
2 1 2017-10-23 16:46:35.647 老鼠爱大米
1 2 2017-10-23 16:46:35.647 周杰伦专辑
2 2 2017-10-23 16:46:35.647 梁静茹专辑
#3
SELECT
C.ID ID, C.TYPE Type, MAX(C.R_DATE) as '时间', A.NAME as '专辑', B.NAME as '专辑'
FROM
music A,
ALBUM B,
user_records C
WHERE
A.ID = C.ID AND B.ID = C.ID
GROUP BY ID;
#4
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式 http://bbs.csdn.net/topics/320211382
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
参考一下这个贴子的提问方式 http://bbs.csdn.net/topics/320211382
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
#1
union应该是最直观的了,
case when 也是能够满足需求的,表结构,和测试数据不贴出来的话,可以自己百度一下怎么写,这样可以加深自己的理解
case when 也是能够满足需求的,表结构,和测试数据不贴出来的话,可以自己百度一下怎么写,这样可以加深自己的理解
#2
--测试数据
--表A
IF OBJECT_ID('tempdb..#tabA') IS NOT NULL
DROP TABLE #tabA
CREATE TABLE #tabA(
id int IDENTITY(1,1),
NAME VARCHAR(20),
)
INSERT INTO #tabA
SELECT '求佛' union all
SELECT '老鼠爱大米'
--表B
IF OBJECT_ID('tempdb..#tabB') IS NOT NULL
DROP TABLE #tabB
CREATE TABLE #tabB(
id int IDENTITY(1,1),
NAME VARCHAR(20),
)
INSERT INTO #tabB
SELECT '周杰伦专辑' union all
SELECT '梁静茹专辑'
--表C
IF OBJECT_ID('tempdb..#tabC') IS NOT NULL
DROP TABLE #tabC
CREATE TABLE #tabC(
id int,
[TYPE] VARCHAR(5),
dt DATETIME
)
INSERT INTO #tabC
SELECT 1,'1',GETDATE() UNION ALL
SELECT 2,'1',GETDATE() UNION ALL
SELECT 1,'2',GETDATE() UNION ALL
SELECT 2,'2',GETDATE()
--测试数据结束
;WITH cte AS (
SELECT t1.*,t2.NAME FROM #tabC t1
INNER JOIN #tabA t2 ON t1.id=t2.id
WHERE t1.[TYPE]='1'
UNION ALL
SELECT t1.*,t2.NAME FROM #tabC t1
INNER JOIN #tabB t2 ON t1.id=t2.id
WHERE t1.[TYPE]='2'
)
SELECT * FROM cte ORDER BY dt
id TYPE dt NAME
----------- ----- ----------------------- --------------------
1 1 2017-10-23 16:46:35.647 求佛
2 1 2017-10-23 16:46:35.647 老鼠爱大米
1 2 2017-10-23 16:46:35.647 周杰伦专辑
2 2 2017-10-23 16:46:35.647 梁静茹专辑
#3
SELECT
C.ID ID, C.TYPE Type, MAX(C.R_DATE) as '时间', A.NAME as '专辑', B.NAME as '专辑'
FROM
music A,
ALBUM B,
user_records C
WHERE
A.ID = C.ID AND B.ID = C.ID
GROUP BY ID;
#4
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式 http://bbs.csdn.net/topics/320211382
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
参考一下这个贴子的提问方式 http://bbs.csdn.net/topics/320211382
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。