2014-05-09 48 views
0

我有兩個表像這樣連接兩個表,並同時旋轉的SQL Server 2008

表1

SegmentNo PassingPotencies 
1   8 
2   10 

表2

BatchAvg  Total TotalSegments TotalPassed 
106.22  20   2   18 

我要加入兩個表用一個簡單的登錄。如果表1中的PassingPotencies不等於10,那麼分段失敗,反之亦然。最終的結果應該是這個樣子

TableResult

BatchAvg  Total  TotalSegments  TotalPassed  Segment1  Segment2 
106.22   20   2    18    Fail  Pass 

任何幫助是極大的讚賞。謝謝。

+1

這兩個表如何加入雖然?我有沒有批號? –

+0

對不起,目前這些表格之間沒有關係。他們完全分開。 – Abe

+0

不可能,除非通過某些共同的列來建立表格之間的關係 – Rahul

回答

1

隨着你目前的設計,這是你可以實現(最接近的東西)。

看到這裏http://sqlfiddle.com/#!3/e86f5/5

select distinct BATCHAVG, 
TOTAL, 
TOTALSEGMENTS, 
TOTALPASSED, 
SegmentNo, 
case when PASSINGPOTENCIES <> 10 then 'Failed' 
else 'Passed' end as SegmentStatus 
from 
(
select * from table2,table1 
) X 

演示上面的語句將導致

enter image description here

+0

感謝您的幫助。你給了我一個全新的視角。 – Abe

1

這將在您的實際情況下工作。在這裏看到一個演示:SQLFiddle

首先,加入這兩個表:

SELECT 
    T2.BATCHAVG 
, T2.TOTAL 
, T2.TOTALSEGMENTS 
, T2.TOTALPASSED 
, T1.SEGMENTNO 
, (CASE WHEN T1.PASSINGPOTENCIES >= 10 THEN 'PASSED' ELSE 'FAILED' END) AS SEGMENT 
INTO TABLE3 
FROM TABLE1 T1 
CROSS JOIN TABLE2 T2 

然後,選擇這樣此表。這是某種PIVOT:

SELECT 
    T.BATCHAVG 
, T.TOTAL 
, T.TOTALSEGMENTS 
, T.TOTALPASSED 
, MAX(T.SEGMENT1)  AS SEGMENT1 
, MAX(T.SEGMENT2)  AS SEGMENT2 
FROM (
SELECT 
    T1.BATCHAVG 
, T1.TOTAL 
, T1.TOTALSEGMENTS 
, T1.TOTALPASSED 
, (CASE WHEN T1.SEGMENTNO = '1' THEN T1.SEGMENT END) AS SEGMENT1 
, (CASE WHEN T1.SEGMENTNO = '2' THEN T1.SEGMENT END) AS SEGMENT2 
FROM TABLE3 T1 
) T 
GROUP BY 
    T.BATCHAVG 
, T.TOTAL 
, T.TOTALSEGMENTS 
, T.TOTALPASSED 
+0

這正是我正在尋找的。謝謝!!。 – Abe