1

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)

データの例:

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になります。

    レポーターグループ名ノード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

どのように目標を達成しますか?テーブル構造を変更せずに可能ですか?

どうもありがとう!カフェ

4

2 に答える 2

1

さて、私は方法を見つけたと思います。

まずDISTINCT、挿入コマンドで必要です。

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

そして、次の選択で、私が探している情報を抽出することができます:

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
于 2013-02-26T14:54:34.453 に答える
0

いいえ、おそらく#nodes_extractにレポーターとグループ名を含めることによって、テーブルを結合する方法を含める必要があります。同じクエリ(および追加の列)で#nodes_extractを再生成しようとしても、順序が同じであるという保証はありません。

于 2013-02-26T06:46:24.273 に答える