Sql server SQL Server如何构造子查询以将字段描述连接到ID
我试图返回结果,用更具可读性的描述值替换记录ID。通过AS更改列名非常简单,但我认为需要一个子查询来获取ID值,如PT1,并获取描述值作为替换 例如,我有一个table1,其中有一些列,如: id |纸张|涂层| CreatedOn |类型 1 | pid3 | cid5 |某个日期| tid2 2 | pid2 | cid8 |某个日期| tid3 3 | pid1 | cid1 |某日| tid4 然后,表2给出了父表中引用id的详细信息: id | fKey |描述| 1 | pid3 |一些用户友好的描述| 1 | pid1 |其他一些描述| 1 | pid2 |其他东西| 表三和表四也类似 我尝试使用连接链接纸张ID,但未返回任何值 选择表1.纸张作为“纸张名称”,表1.涂层,表1.CreatedOn,表1.类型,表2.description 来自表1 将表2连接到表1上。纸张=表2.fKey 我的实际查询如图所示,但表名已更改:Sql server SQL Server如何构造子查询以将字段描述连接到ID,sql-server,join,subquery,Sql Server,Join,Subquery,我试图返回结果,用更具可读性的描述值替换记录ID。通过AS更改列名非常简单,但我认为需要一个子查询来获取ID值,如PT1,并获取描述值作为替换 例如,我有一个table1,其中有一些列,如: id |纸张|涂层| CreatedOn |类型 1 | pid3 | cid5 |某个日期| tid2 2 | pid2 | cid8 |某个日期| tid3 3 | pid1 | cid1 |某日| tid4 然后,表2给出了父表中引用id的详细信息: id | fKey |描述| 1 | pid3 |
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
有人能告诉我实现这个目标的正确方向吗?谢谢
FROM Table1 LEFT JOIN Table2 ON Table2.PTId = Table1.PCId
这看起来像支冒烟的枪,是不是应该放在桌子上?鉴于表2中的样本数据,仅显示了PTId的值,即。也许您正在创建一个通用表,但是如果是这种情况,那么应该重命名表2中的“FK”,这样它就不会与表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
@表2
pid3 some user friendly description
pid2 some other description
pid1 something else
@合二为一
您可能需要重新考虑在表2中设置一个单独的id列。根据您的描述,似乎fKey确实是id。一个好的测试是,该值是否会在表2中重复。如果不是,则它应该是该表的主键,因为表2包含纸张的详细信息,而表1只是通过纸张id链接到它。我已经更新了实际查询以显示实际值。我希望使用的连接不会返回任何值,但是使用父表PD_ComboRun和PTId的it paper type列的逻辑应该能够通过链接SM_PaperType.PTId=PD_ComboRun.ptidt从同级表SM_PaperType中提取PTCode值。这真的很有帮助。事实证明,DB实际上绑定到了另一个字段值,而不是预期的fKey。问题解决了!感谢所有的贡献!!!