TSQL:获取给定ID的所有行
我试图将所有数据库报告输出到一个报告中。我目前使用嵌套的select语句来获取每个ID的每一行(ID的数量未知)。现在我想在一个查询中返回每个ID的所有行(例如,如果有25行,则为1-25)。我将如何做到这一点?TSQL:获取给定ID的所有行
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
这将返回结果的排名主域和子域,以及有关的职位表中的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循环插入它们,然后选择他们删除表来解决这个问题。我会稍微留意一下,看看有没有人拿起更好的方式来做这件事,因为我讨厌这样做。
这是一个查询?你提供了你自己的答案?
如果你的意思是你想返回一系列'行',出于某种原因,'列',这个能力确实存在,但我不记得确切的名字。可能的关键。但有点奇怪。
上面的查询将返回一行,因为每个“列”只有一个值。我想遍历查询并从每个可用的ID中增加ID,以便显示许多行。 – 2009-08-12 10:51:01
看看这是你正在寻找
选择 CASE WHEN reports.id什么= 1,则reports.Name ELSE “” AS Col1中, CASE WHEN reports.id = 2,则reports.Name ELSE “” AS col2的 .... 从报告中
最好的问候, 约尔丹
如果我有几百个ID,那可能会变得很长。 – 2009-08-12 10:50:18
下面是做这件事的一种方法:
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%'
假设你有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
再次,取决于您的报告相似,你很可能合并这些在某种程度上。
我试过第一个,它会输出与报表中的行相同数量的行,但它只是重复第一行。 – 2009-08-12 11:38:35
是每个子表从不同的表中选择? – 2009-08-12 10:46:02
其中一些是,但他们都在where子句中使用相同的ID。 – 2009-08-12 10:46:57
您可以添加一个您的表格样式的示例,以及您想要作为查询输出的示例吗? – Blorgbeard 2009-08-12 10:47:36