2014-03-13 62 views
1

我有兩個名爲TEST和STEPS的表,它們與Test-Id列相關。正常行輸出中的計數值

我能夠通過進行如下所示的連接來獲取所有必需的列。

select t.id,t.name,s.step_no,s.step_data 
from test t,steps s 
where t.id = s.testid 

我需要的是,除了列之外,我還需要每次比賽的總計數。

小提琴:http://sqlfiddle.com/#!6/794508/1

電流輸出:

ID NAME STEP_NO STEP_DATA 
-- ---- ------- --------- 
1 TC1 1  Step 1 
1 TC1 2  Step 2 
1 TC1 3  Step 3 
2 TC2 1  Step 1 

所需的輸出:

ID NAME STEP_NO STEP_DATA COUNT 
-- ---- ------- --------- ----- 
1 TC1 1  Step 1  3 
1 TC1 2  Step 2  3 
1 TC1 3  Step 3  3 
2 TC2 1  Step 1  1 

其中count是從臺階上表中的總行數每個Id都在TEST ta中BLE。

如果您需要任何信息,請讓我知道。

回答

1
select t.id,t.name,s.step_no,s.step_data,counts.count 
from test t 
    join steps s ON t.id = s.testid 
    join (select testid, count(*) as count 
      from steps 
      group by testid) counts ON t.id = counts.testid 
+0

我們有使用OLAP任何選項? – Purus

0

就是這個工程....

DECLARE @test TABLE 
    (
    id int identity primary key, 
    name varchar(20) 
    ); 

INSERT INTO @test VALUES('TC1'), ('TC2'); 

DECLARE @steps TABLE 
    (
    id int identity primary key, 
    testid int, 
    step_no int, 
    step_data varchar(100) 
    ); 

INSERT INTO @steps(testid,step_no,step_data) VALUES 
(1,1,'Step 1'), (1,2,'Step 2'),(1,3,'Step 3'),(2,1,'Step 1'); 

select t.id,t.name,s.step_no,s.step_data,(select SUM(testid) from @steps where testid = s.testid) 
from @test t,@steps s 
where t.id = s.testid 
2

你可以只添加count(*) over ...到查詢:

SELECT 
    t.id, 
    t.name, 
    s.step_no, 
    s.step_data, 
    [count] = COUNT(*) OVER (PARTITION BY s.testid) 
FROM 
    test t, 
    steps s 
WHERE 
    t.id = s.testid 

你可以閱讀更多有關OVER子句在這裏:

也請考慮進入的

因此,考慮所有這些點考慮,我們可以把這樣上面的查詢:

SELECT 
    t.id, 
    t.name, 
    s.step_no, 
    s.step_data, 
    [count] = COUNT(*) OVER (PARTITION BY s.testid) 
FROM 
    dbo.test AS t 
INNER JOIN 
    dbo.steps AS s 
ON 
    t.id = s.testid 
;
+0

感謝您的建議和意見。我仍在學習。 :) – Purus