在我的数据库中有许多名称相似的表; abc-123,abc-245,abc-246等 这些表中的每一个都有一个带有每个记录的日期字段,称为samplesate。我想找到每个表中最早的记录,其名称与'abc-%'相匹配。我可以单独获取它们,但必须有一种简单的方法从一组表中选择数据!
答案 0 :(得分:0)
你想要的是一个UNION查询。 UNION将两个或多个查询的结果组合到一个结果集中,该结果集包括属于联合中所有查询的所有行。 UNION操作与使用组合来自两个表的列的连接不同。
示例:
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name
答案 1 :(得分:0)
我要做的是编写一个写查询的查询(又名“编写代码的代码”)。例如,此初始查询应生成一个tsql语句,该语句将为您提供所需的最终数据。 根据需要调整WHERE子句:
SELECT 'SELECT ''[' + c.TABLE_SCHEMA + '].[' + c.TABLE_NAME + ']'' AS TableName, MAX(SampleDate) AS MaxDate FROM [' + c.TABLE_SCHEMA + '].[' + c.TABLE_NAME + '] UNION ALL'
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME LIKE 'ABC-%'
AND c.COLUMN_NAME = 'SampleDate'
如果你在SSMS中,如果将输出设置为文本(CTRL + T),则会更容易一些。运行查询后,您将在输出窗口中看到与此类似的内容:
SELECT '[dbo].[ABC-123]' AS TableName, MAX(SampleDate) AS MaxDate FROM [dbo].[ABC-123] UNION ALL
SELECT '[dbo].[ABC-456]' AS TableName, MAX(SampleDate) AS MaxDate FROM [dbo].[ABC-456] UNION ALL
SELECT '[dbo].[ABC-78]' AS TableName, MAX(SampleDate) AS MaxDate FROM [dbo].[ABC-78] UNION ALL
SELECT '[dbo].[ABC-90]' AS TableName, MAX(SampleDate) AS MaxDate FROM [dbo].[ABC-90] UNION ALL
复制&将输出粘贴到新窗口中。从最后一行删除“UNION ALL”,然后运行查询。