LookupTable中:
userid, mobileid, startedate, enddate , owner
1 , 1 , 12-12-2000, 01-01-2001, asd
2 , 2 , 12-12-2000, 01-01-2001, dgs
3 , 3 , 02-01-2001, 01-01-2002, sdg
4 , 4 , 12-12-2000, 01-01-2001, sdg
UserInfoTable:
userid, firstname, lastname, address
1 , tom , do , test
2 , sam , smith , asds
3 , john , saw , asdasda
4 , peter , winston , near by
移动:
Mobileid, Name , number, imeinumber
1 , apple , 123 , 1111111
2 , nokia , 456 , 2222222
3 , vodafone , 789 , 3333333
CallLogs:
id , Mobileid, callednumbers (string), date , totalduration
1 , 1 , 123,123,321 , 13-12-2000 , 30
2 , 1 , 123,123,321 , 14-12-2000 , 30
3 , 2 , 123,123,321 , 13-12-2000 , 30
4 , 2 , 123,123,321 , 14-12-2000 , 30
5 , 3 , 123,123,321 , 13-12-2000 , 30
6 , 3 , 123,123,321 , 14-12-2000 , 30
7 , 1 , 123,123,321 , 13-01-2002 , 30
8 , 1 , 123,123,321 , 14-01-2002 , 30
我想要一个查询,它将返回以下内容:
firstname,lastname,mobile.name作为mobilename,callednumbers(作为CallLogs表中不同行的连续字符串),需要2000年 例如:
firstname, lastname, mobilename, callednumbers
tom , do , apple , 123,123,321, 123,123,321
sam , smith , nokia , 123,123,321, 123,123,321
peter , winston , apple , 123,123,321, 123,123,321
任何帮助都将受到高度赞赏......
我已经尝试了这个但没有成功..汤姆正在接受调查,反之亦然。我正在使用sql server。
SELECT DISTINCT firstname,
lastname,
mobilename,
callednumbers
FROM ([testdatabase].[dbo].[LookupTable] lt
INNER JOIN [testdatabase].[dbo].[UserInfoTable] user1
ON lt.userid = user1.id)
INNER JOIN [testdatabase].[dbo].[Mobile] device1
ON lt.mobileid = device1.id
INNER JOIN [testdatabase].[dbo].[CallLogs] log1
ON lt.mobileid = log1.deviceid
WHERE lt.starttime LIKE '%2000%'
ORDER BY firstname
答案 0 :(得分:4)
DECLARE @LookupTable TABLE (
userid INT,
mobileid INT,
startedate DATETIME,
enddate DATETIME,
owner CHAR(3))
INSERT INTO @LookupTable
SELECT 1, 1, '20001212 00:00:00.000', '20010101 00:00:00.000', N'asd' UNION ALL
SELECT 2, 2, '20001212 00:00:00.000', '20010101 00:00:00.000', N'dgs' UNION ALL
SELECT 3, 3, '20010102 00:00:00.000', '20020101 00:00:00.000', N'sdg' UNION ALL
SELECT 4, 4, '20001212 00:00:00.000', '20010101 00:00:00.000', N'sdg'
DECLARE @UserInfoTable TABLE (
userid INT,
firstname VARCHAR(10),
lastname VARCHAR(10),
address VARCHAR(10))
INSERT INTO @UserInfoTable
SELECT 1, N'tom', N'do', N'test' UNION ALL
SELECT 2, N'sam', N'smith', N'asds' UNION ALL
SELECT 3, N'john', N'saw', N'asdasda' UNION ALL
SELECT 4, N'peter', N'winston', N'near by'
DECLARE @Mobile TABLE (
mobileid INT,
name VARCHAR(10),
number INT,
imeinumber INT )
INSERT INTO @Mobile
SELECT 1, N'apple', 123, 1111111 UNION ALL
SELECT 2, N'nokia', 456, 2222222 UNION ALL
SELECT 3, N'vodafone', 789, 3333333
DECLARE @CallLogs TABLE (
id INT,
mobileid INT,
callednumbers VARCHAR(50),
[date] DATETIME,
totalduration INT )
INSERT INTO @CallLogs
SELECT 1, 1, N'123,123,321', '20001213 00:00:00.000', 30 UNION ALL
SELECT 2, 1, N'123,123,321', '20001214 00:00:00.000', 30 UNION ALL
SELECT 3, 2, N'123,123,321', '20001213 00:00:00.000', 30 UNION ALL
SELECT 4, 2, N'123,123,321', '20001214 00:00:00.000', 30 UNION ALL
SELECT 5, 3, N'123,123,321', '20001213 00:00:00.000', 30 UNION ALL
SELECT 6, 3, N'123,123,321', '20001214 00:00:00.000', 30 UNION ALL
SELECT 7, 1, N'123,123,321', '20020113 00:00:00.000', 30 UNION ALL
SELECT 8, 1, N'123,123,321', '20020114 00:00:00.000', 30
SELECT DISTINCT firstname,
lastname,
device1.name AS mobilename,
stuff((select ',' + callednumbers
from @CallLogs log1
where lt.mobileid = log1.mobileid
for xml path('')), 1, 1, '') AS callednumbers
FROM (@LookupTable lt
INNER JOIN @UserInfoTable user1
ON lt.userid = user1.userid)
INNER JOIN @Mobile device1
ON lt.mobileid = device1.mobileid
WHERE lt.startedate > '20000101' AND startedate < '20010101'
ORDER BY firstname