我有一张下表
+------------------------+ | Column1 Column2 | +------------------------+ | 101 A_TABLE | | | | 103 B_TABLE | +------------------------+
我想运行一个查询:
if my column1 row 1 has 101 then select * from A_TABLE
If my column1 row 2 has 103 then select * from B_TABLE
and so on
我非常感谢您的投入。
答案 0 :(得分:1)
你需要做这样的事情:
declare @SQL varchar(max) = ''
select @SQL = @SQL + 'select * from ' + Column2 + ' union all '
from table1
set @SQL = left(@SQL, len(@SQL) - 10)
exec (@SQL)
这将从column2中获取所有表,并从中创建union all子句。
答案 1 :(得分:0)
您可以使用sql server cursor:
DECLARE @column1 VARCHAR(50)
DECLARE @column2 VARCHAR(50)
DECLARE @sql VARCHAR(250)
DECLARE db_cursor CURSOR FOR
SELECT Column1, Column2
FROM Your_table
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @Column1, @Column2
WHILE @@FETCH_STATUS = 0
BEGIN
--dynamic match between columns
@sql = 'select * from ' + @Column2
EXEC(@sql)
FETCH NEXT FROM db_cursor INTO @Column1, @Column2
END
CLOSE db_cursor
DEALLOCATE db_cursor
答案 2 :(得分:0)
您可以使用while循环:
DECLARE @Max_Value INT ,@Min_Value INT ,@SQL VARCHAR (1000) =''
SELECT @Max_Value = MAX(Column1) , @Min_Value = MIN(Column1) FROM [Your_Table]
WHILE (@Min_Value <= @Max_Value)
BEGIN
SET @SQL= ( SELECT 'SELECT * FROM '+table_name FROM [Your_Table] WHERE Column1=@Min_Value)
EXEC(@SQL)
SELECT @Min_Value = MIN(Column1) FROM [Your_Table] WHERE Column1 > @Min_Value
END
答案 3 :(得分:-1)
SELECT CASE Column1 WHEN 101 THEN (SELECT * FROM A_Table)
WHEN 103 THEN (SELECT * FROM B_Table)
ELSE END
FROM table
A_Table和B_Table是否包含您可以加入的密钥,因为这会使这更容易?
如果是这样,你可以简单地做
SELECT * FROM table T
INNER JOIN A_Table A on T.Column1 = A.Column1
INNER JOIN B_Table B on T.Column1 = B.Column1
WHERE T.Column1 IN (101,103)
第二种选择最适合性能,但不确定这是否是您所追求的输出。请你能提供表A和B的结构,以及表A,B,...,Z如何链接到&#34;表&#34;通过任何钥匙?目标结果输出也很方便。谢谢!