我正在尝试将所有数据库报告输出到一个报告中。我目前正在使用嵌套的select语句来获取每个ID的每一行(ID的数量是未知的)。现在我想在一个查询中返回每个ID的所有行(例如,如果有25行,则返回1-25行)。我该怎么做?
SELECT (
(SELECT ... FROM ... WHERE id = x) As Col1
(SELECT ... FROM ... WHERE id = x) As Col2
(SELECT ... FROM ... WHERE id = x) As Col3
)
SELECT
(select post_id from posts where report_id = 1) As ID,
(select isnull(rank, 0) from results where report_id = 1 and url like '%www.testsite.com%') As Main,
(select isnull(rank, 0) from results where report_id = 1 and url like '%.testsite%' and url not like '%www.testsite%') As Sub
这将返回主域和子域的结果排名,以及posts表的ID。
ID Main Sub
--------------------------------------
1 5 0
我想循环遍历此查询并将report_id更改为2,然后更改为3,然后更改为4并继续,直到显示所有结果。除了report_id之外,没有其他任何东西需要改变。
这是表格内部的基本示例
POSTS
post_id post report_id
---------------------------------------------------------
1 "Hello, I am..." 1
2 "This may take..." 2
3 "Bla..." 2
4 "Bla..." 3
5 "Bla..." 4
RESULTS
result_id url title report_id
--------------------------------------------------------
1 http://... "Intro" 1
2 http://... "Hello!" 1
3 http://... "Question" 2
4 http://... "Help" 3
REPORTS
report_id description
---------------------------------
1 Introductions
2 Q&A
3 Starting Questions
4 Beginner Guides
5 Lectures
查询将要从第一个帖子,主网站(www)的第一个结果和子域的第一个结果中提取它们的report_id。这些表是具有许多其他表的复杂连接结构的一部分,但出于这些目的,这些表是唯一需要的表。
我设法通过创建表,设置变量来获取所有内容并将它们插入while循环,然后选择它们并删除表来解决问题。我会稍微公开一下,看看有没有人找到一个更好的方法,因为我讨厌这样做。
答案 0 :(得分:1)
如果您需要在其自己的列上显示每个报告ID,请查看PIVOT/UNPIVOT命令。
答案 1 :(得分:1)
这是一种方法:
SELECT posts.post_id AS ID,
IsNull(tblMain.Rank, 0) AS Main,
IsNull(tblSub.Rank, 0) AS Sub
FROM posts
LEFT JOIN results AS tblMain ON posts.post_id = tblMain.report_id AND tblMain.url like '%www.testsite.com%'
LEFT JOIN results AS tblSub ON posts.post_id = tblSub.report_id AND tblSub.url like '%.testsite%' and tblSub.url not like '%www.testsite%'
答案 2 :(得分:0)
这是一个查询?你提供了自己的答案吗?
如果你的意思是你想要返回一系列“行”,由于某种原因,“列”,这种能力确实存在,但我不记得确切的名字。可能的支点。但这有点奇怪。
答案 3 :(得分:0)
看看这是不是你正在寻找
选择 例如,在reports.id = 1 THEN reports.Name ELSE“”作为Col1, 例如,在reports.id = 2 THEN reports.Name ELSE“”作为Col2 .... FROM报告
最诚挚的问候, 约尔丹
答案 4 :(得分:0)
假设您有一个“主”ID表(如果不是,我建议你这样做是为了外键):
SELECT (
(SELECT ... FROM ... WHERE id = m.ID) As Col1
(SELECT ... FROM ... WHERE id = m.ID) As Col2
(SELECT ... FROM ... WHERE id = m.ID) As Col3
)
FROM MasterIDs m
根据每个报告的相似程度,您可以通过将一些逻辑移出嵌套语句并进入查询主体来加快速度。
可能更好的思考方法是将每个报表语句改为返回(ID,值)并执行以下操作:
SELECT
report1.Id
,report1.Value AS Col1
,report2.Value AS Col2
FROM (SELECT Id, ... AS Value FROM ...) report1
JOIN (SELECT Id, ... AS Value FROM ...) report2 ON report1.Id = report2.Id
再次,根据报告的相似性,您可能会在某些方面将这些结合起来。