Reputation: 157
let's assume we've got following tables in DB:
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)
Example of data:
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')
Let's extract some data into #nodes_extract
INSERT INTO #nodes_extract
SELECT min(node), count(node), 'blabla'
FROM #nodes
GROUP BY reporter, groupname
Now I would like insert all information from #nodes to #nodes_histo and add nodes_extract_id Expected result in #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
How would you achieve the goal? Is it possible without changing tables structure?
thanks a lot! kafe
Upvotes: 1
Views: 74
Reputation: 157
Well I think I found a way..
First of all DISTINCT
is required in the insert command:
INSERT INTO #nodes_extract
SELECT DISTINCT min(node), count(node), 'blabla'
FROM #nodes
GROUP BY reporter, groupname
And with following select I can extract information I'm looking for:
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
Upvotes: 1
Reputation: 3771
No, you would have to include a way to join the tables, probably by including reporter and groupname in #nodes_extract. Even if you were to try to regenerate #nodes_extract with the same query (and the additional columns), there's no guarantee that the order would be the same.
Upvotes: 0