0

レコード ID を人間が読みやすい説明値に置き換えた結果を返そうとしています。AS を使用して列名を変更するのは簡単ですが、PT1 などの ID 値を取得し、代わりに Description 値を取得するには、サブクエリが必要になると思います。

たとえば、次のような列を持つ table1 があります。

id| 紙 | コーティング | 作成日 | タイプ

1 | pid3 | cid5 | いくつかの日付 | tid2 2 | pid2 | cid8 | いくつかの日付 | tid3 3 | pid1 | cid1 | いくつかの日付 | tid4

次に、table2 には、親テーブルの参照 ID に関する詳細があります。

id| fキー | 説明 |

1 | pid3 | ユーザーフレンドリーな説明 | 1 | pid1 | その他の説明 | 1 | pid2 | 何か他のもの |

表 3 と 4 についても同様

Paper ID をリンクする JOIN を使用しようとしましたが、値が返されませんでした

SELECT table1.Paper as 'Paper Name', table1.Coating, table1.CreatedOn, table1.Type, table2.description FROM table1 JOIN table2 ON table1.Paper = table2.fKey

私の実際のクエリは次のとおりですが、テーブル名が変更されました。

SELECT PD_ComboRun.RNId AS 'RUN #', PD_ComboRun.RNQty AS Quantity,
       PD_ComboRun.PTId, PD_ComboRun.PSId AS Size, PD_ComboRun.RNType AS 'Run Type',
       PD_ComboRun.PCId AS 'Press Coating', PD_ComboRun.UVFid AS 'UV Finish',
       PD_ComboRun.Notes AS 'Special Instructions', PD_ComboRun.CreatedOn AS 'Date Created', 
       SM_PaperType.PTCode AS Paper, SM_PaperType.PTId AS Expr1
FROM  PD_ComboRun 
LEFT JOIN SM_PaperType ON SM_PaperType.PTId = PD_ComboRun.PTId

誰かがこの目標を達成するための正しい方向を教えてもらえますか? ありがとう!

4

2 に答える 2

1

私はあなたが必要だと思うので、これは完璧に機能します。テーブルとフィールドを使用するように変更しました。

DECLARE @PD_ComboRun TABLE(RNId int,RNQty int,PTId varchar(10),
    PSId varchar(10),PCId varchar(10),UVFid varchar(10),createdOn smalldatetime, 
    RNType varchar(10),Notes varchar(MAX))
INSERT INTO @PD_ComboRun
SELECT 1,5,'pid3','psid1','cid5','uvid1',GETDATE(),'tid2',''
UNION ALL
SELECT 2,10,'pid2','psid2','cid8','uvid4',GETDATE(),'tid3','notes'
UNION ALL
SELECT 3,7,'pid1','psid1','cid1','uvid1',GETDATE(),'tid4',''

SELECT * FROM @PD_ComboRun

DECLARE @SM_PaperType TABLE(PTId varchar(10),PTCode varchar(50))
INSERT INTO @SM_PaperType
SELECT 'pid3','some user friendly description'
UNION ALL
SELECT 'pid2','some other description'
UNION ALL
SELECT 'pid1','something else'

SELECT * FROM @SM_PaperType

SELECT t1.RNId AS [Run #], t1.RNQty AS Quantity,
    t1.PTId,t1.PSId AS Size,t1.RNType AS [Run Type], 
    t1.PCId AS [Press Coating], t1.UVFid AS 'UV Finish', 
    t1.Notes AS 'Special Instructions',t1.createdOn AS 'Date Created',
    t2.PTCode AS Paper,t2.PTId AS Expr1
FROM @PD_ComboRun t1 INNER JOIN @SM_PaperType t2 ON t1.PTId=t2.PTId

結果

@表1

1   5   pid3    psid1   cid5    uvid1   2012-05-31 17:45:00 tid2    
2   10  pid2    psid2   cid8    uvid4   2012-05-31 17:45:00 tid3    notes
3   7   pid1    psid1   cid1    uvid1   2012-05-31 17:45:00 tid4    

@ table2

pid3    some user friendly description
pid2    some other description
pid1    something else

@combined ここに画像の説明を入力してください

于 2012-05-31T23:31:53.283 に答える
0
FROM  Table1 LEFT JOIN Table2 ON Table2.PTId = Table1.PCId

これは決定打のように見えますが、Table1.PTId ではないでしょうか? 表 2 のサンプル データでは、PTId の値のみが示されています。汎用テーブルを作成している可能性がありますが、その場合は、Table2 の「FK」の名前を変更して、Table1 と衝突しないようにする必要があります。

于 2012-05-31T23:02:16.547 に答える