うまく機能する次のクエリがありますが、ピボットの結果を変更できるかどうか知りたいと思っていました。
以下は、現在の出力のサンプルです。
SERIAL_ID Test_1 Test_2 Test_3 Test_4 Test_5 Test_6
12398701 NULL NULL NULL NULL Memory_1 NULL
これが私の望ましい出力です。TEST_AREA が NULL で、TEST_RESULT = PASS または FAIL (レコードなし) を持たない場合は、INC を表示します。また、TEST_RESULT = PASS の場合は、NULL を PASS に置き換えます。以下の例 Test_3 と Test_6 は実行されませんでした (記録なし)
SERIAL_ID Test_1 Test_2 Test_3 Test_4 Test_5 Test_6
12398701 PASS PASS INC PASS Memory_1 INC
変更が必要なクエリは次のとおりです。
select SERIAL_ID, Test_1, Test_2, Test_3, Test_4, Test_5, Test_6
from
(
select SERIAL_ID, FAIL_CODE, TEST_AREA
from
(
select f1.SERIAL_ID, f1.FAIL_CODE, f1.TEST_AREA, f1.TEST_RESULT,
row_number() over(partition by f1.SERIAL_ID, f1.TEST_AREA
order by f1.TEST_DATE desc) seq
from dbo_TBL_DM_TEST_RESULTS_Flex f1
where f1.TEST_DATE> '2013-07-01'
) d
where seq = 1
and (TEST_RESULT='fail' or TEST_RESULT='Pass')
) d
pivot
(
max(FAIL_CODE)
for TEST_AREA in (Test_1, Test_2, Test_3, Test_4, Test_5, Test_6)
) piv;
データの例を次に示します。
TEST_AREA TEST_DATE SERIAL_ID TEST_RESULT FAIL_CODE
Test_1 8/14/2013 11:29:24 AM 12398701 PASS NULL
Test_2 8/17/2013 08:49:35 AM 12398701 PASS NULL
Test_2 8/17/2013 10:15:38 PM 12398701 PASS NULL
Test_4 8/17/2013 10:23:22 PM 12398701 FAIL Pwr_up
Test_4 8/17/2013 10:24:22 PM 12398701 PASS NULL
Test_5 8/18/2013 07:30:19 AM 12398701 FAIL Pwr_up
Test_5 8/18/2013 07:34:34 AM 12398701 FAIL Memory_1