注意:这适用于SQL Server 2008。
我有一个包含许多列的表,其中两列与此讨论相关:Object和TableID。对象是一个可读的名称。 TableID对应于与Object关联的表,尽管关联的表都以字母T
开头,如表T135或表T143所示。
SchemaTable
Object TableID /* Object is type varchar, TableID is type int
Form1 135
Form2 143
Form3 321
我想制作一个SQL查询,它将根据Object的值从这些表中选择内容。这是我到目前为止所做的事情(不起作用):
SELECT Col1, Col2
FROM (
SELECT (T' + CAST(TableID AS VARCHAR))
FROM SchemaTable
WHERE Object = 'Form1'
)Tbl_T
WHERE Col1 IS NOT NULL
我可以使用子查询以这种方式选择表吗?如果没有,你还有什么建议以及如何建议?
非常感谢您的帮助。
修改
似乎我的问题或疑问不明确。让我试着解决这个问题。
我可以直接选择表格T135:
SELECT Col1, Col2
FROM T135
WHERE Col1 IS NOT NULL
但我想要做的是根据表Object
中的列SchemaTable
选择表T135。
SchemaTable
中选择值的子表格。我只想抓住TableID
(即135)并从所述表中选择内容(即T135)。表T135中没有TableID
列。 TableID
实际上对应于表的名称。它不被用作其他表中的键或标识。我认为,混淆在于理解我想要实现的目标。
我希望更清楚。
感谢您的帮助。
答案 0 :(得分:2)
是的,您可以使用子查询以这种方式选择表。这是另一个例子:
select * from
(select ndc,client_id,pkg_sz from ABC where pkg_sz=100) dist,
(select ndc,client_id from XYZ where pkg_sz=500) trns
where trns.client_id = dist.client_id
and dist.ndc=trns.ndc;