2013-02-26 238 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 

而且具有以下選擇我可以提取我在尋找信息: