我喜欢在SQL服务器中创建10个差异临时表,我想要做的就是将它们全部联合到最终的临时表中,将它们全部保存在一个表中。所有表只有一行,看起来与下面的两个临时表非常相似。
这是我到目前为止这只是两个临时表的一个例子,因为它们都完全像这个,然后#final是我希望将all连接到的表:
create table #lo
(
mnbr bigint
)
insert into #login (mnbr)
select distinct (_ID)
FROM [KDB].[am_LOGS].[dbo].[_LOG]
WHERE time >= '2012-7-26 9:00:00
Select count(*) as countreject
from #lo
create table #pffblo
(
mber_br
)
insert into #pffblo (mber_br)
select distinct (mber_br)
from individ ip with (nolock)
join memb mp with (nolock)
on( ip.i_id=mp.i_id and mp.p_type=101)
where ip.times >= '2012-9-26 11:00:00.000'
select count(*) as countaccept
create table #final
(
countreject bigint
, Countacceptbigint
.....
)
insert into #final (Countreject, Countaccept....more rows here...)
select Countreject, Countaccept, ...more rows selected from temp tables.
from #final
union
(select * from #lo)
union
(select * from #pffblo)
select *
from #final
drop table #lo
drop table #pffblo
drop table #final
如果这个联合行的表单形成那些临时表到最后一个。然后这是显示所有那些联合的行的正确方法。当我执行此联合时,我在联合中获取列的消息数需要匹配在联合中选择的列数
答案 0 :(得分:3)
我认为你以错误的方式使用工会。当您需要具有相同结构且希望将它们放入一个数据集的数据集时,将使用联合。
e.g:
CREATE TABLE #Table1
(
col1 BIGINT
)
CREATE TABLE #Table2
(
col1 BIGINT
)
--populate the temporary tables
CREATE TABLE #Final
(
col1 BIGINT
)
INSERT INTO #Final (col1)
SELECT *
FROM #Table1
UNION
SELECT *
FROM #Table2
drop table #table1
drop table #table2
drop table #Final
我认为你要做的就是获得1个数据集,其中包含所有表格的数量。联盟不会这样做。
最简单的方法(尽管性能不是很好)就是执行以下选择语句:
CREATE TABLE #Table1
(
col1 BIGINT
)
CREATE TABLE #Table2
(
col1 BIGINT
)
--populate the temporary tables
CREATE TABLE #Final
(
col1 BIGINT,
col2 BIGINT
)
INSERT INTO #Final (col1, col2)
select (SELECT Count(*) FROM #Table1) as a, (SELECT Count(*) FROM #Table2) as b
select * From #Final
drop table #table1
drop table #table2
drop table #Final
答案 1 :(得分:2)
您似乎想要从每个临时表中获取值,然后将其放入单行数据中。这基本上是PIVOT
,您可以使用以下内容:
create table #final
(
countreject bigint
, Countaccept bigint
.....
)
insert into #final (Countreject, Countaccept....more rows here...)
select
from
(
select count(*) value, 'Countreject' col -- your UNION ALL's here
from #lo
union all
select count(*) value, 'countaccept' col
from #pffblo
) x
pivot
(
max(value)
for col in ([Countreject], [countaccept])
) p
说明:
您将创建一个与此类似的子查询,其中包含每个临时表的COUNT
。子查询中有两列,一列包含表中的count(*)
,另一列是别名的名称:
select count(*) value, 'Countreject' col
from #lo
union all
select count(*) value, 'countaccept' col
from #pffblo
然后将PIVOT
这些值插入到最终的临时表中。
如果您不想使用PIVOT
,那么您可以使用带有聚合函数的CASE
语句:
insert into #final (Countreject, Countaccept....more rows here...)
select max(case when col = 'Countreject' then value end) Countreject,
max(case when col = 'countaccept' then value end) countaccept
from
(
select count(*) value, 'Countreject' col -- your UNION ALL's here
from #lo
union all
select count(*) value, 'countaccept' col
from #pffblo
) x
或者您可能JOIN
所有与此类似的临时表,您为表中的一条记录创建row_number()
,然后使用{{1加入表}}:
row_number()
答案 2 :(得分:2)
SELECT *
INTO #1
FROM TABLE2
UNION
SELECT *
FROM TABLE3
UNION
SELECT *
FROM TABLE4
答案 3 :(得分:0)
如果您想对结果表中的每个临时表进行计数,您只需要为子查询中的每一列计算它:
INSERT INTO结果(col1,col2,... 选择 (SELECT COUNT()FROM tbl1)col1 ,(SELECT COUNT()FROM tbl2)col2 ..