2013-02-26 117 views
1

假设我们有以下的数据库表:数据库表中提取和链接提取的数据

CREATE TABLE #nodes(reporter varchar(10), groupname varchar(10), node varchar(20)) 
CREATE TABLE #nodes_extract(id int IDENTITY, min_node varchar(20), count_nodes int, descr varchar(10)); 
CREATE TABLE #nodes_histo(reporter varchar(10), groupname varchar(10), node varchar(20), nodes_extract_id int) 

数据示例:

INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep1','group1','node1') 
INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep1','group1','node2') 
INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep1','group2','node3') 
INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep2','group1','node1') 
INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep2','group1','node4') 
INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep2','group2','node5') 
INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep3','group1','node5') 
INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep3','group1','node6') 
INSERT INTO #nodes (reporter, groupname, node) VALUES ('rep3','group2','node7') 

我们的一些数据提取到#nodes_extract

INSERT INTO #nodes_extract 
SELECT min(node), count(node), 'blabla' 
FROM #nodes 
GROUP BY reporter, groupname 

现在我想从#nodes插入所有信息到#nodes_histo并添加nodes_extract_id 预期结果#nodes_histo:

 
    reporter groupname node nodes_extract_id 
    rep1  group1  node1 1 
    rep1  group1  node2 1 
    rep1  group2  node3 4 
    rep2  group1  node1 2 
    rep2  group1  node4 2 
    rep2  group2  node5 5 
    rep3  group1  node5 3 
    rep3  group1  node6 3 
    rep3  group2  node7 6 

您将如何实现目标? 是否可以不改变表结构?

非常感谢! kafe

+0

请问您能解释一下'reporter','groupname'和'node'的值是如何计算'node_extract_id'的数值? – 2013-02-26 06:49:45

+0

@MahmoudGamal:它只是提取表中的一个自动增量ID .. – kafe 2013-02-26 07:01:52

+0

OK,但表#'nodes_extract'中没有节点'node2','node4'和'node6',因此它们没有自动增量ID。你想如何在'#nodes_histo'表中插入id?或者,为什么他们应该分别给出你在期望结果'1','2'和'3'上显示的ID? – 2013-02-26 07:19:27

回答

1

嗯,我想我找到了一种方法..

所有DISTINCT首先在插入命令要求

INSERT INTO #nodes_histo 
SELECT a.reporter, a.groupname,a.node, e.id 
FROM 
    (SELECT reporter 
      , groupname 
      , node 
      , min(node) OVER (PARTITION BY REPORTER, groupname) m 
      , count(node) OVER (PARTITION BY REPORTER, groupname) c 
    FROM #nodes) a 
LEFT JOIN 
    #nodes_extract e 
ON a.m = e.min_node 
AND a.c = e.count_nodes 
0

不,您必须包含一种方法来加入表格,可能是通过在#nodes_extract中包含记者和组名。即使您尝试使用相同的查询(和附加列)重新生成#nodes_extract,也不能保证顺序是相同的。

INSERT INTO #nodes_extract 
SELECT DISTINCT min(node), count(node), 'blabla' 
FROM #nodes 
GROUP BY reporter, groupname 

而且具有以下选择我可以提取我在寻找信息: