Выбрать по таблицам из запроса - PullRequest
0 голосов
/ 18 мая 2018

В SQL Server 2005 я делаю запрос, который выдает набор результатов со следующими атрибутами:

TableName | ColumnName | SomeColumn

Могу ли я как-то улучшить этот запрос, чтобы для каждой записи из этого набора результатов я получил бы count of elements from that table (или вообще выполнить любой запрос к таблице и столбцу, указанному в TableName, ColumnName? Может ли быть достигнуто что-то подобное:

SELECT *, (SELECT COUNT(*) FROM Q.TableName) AS Cnt, (SELECT AVG(SomeColumn) FROM Q.TableName) AS AvgValue

FROM 
(`...OMITTED ORIGINAL QUERY...`) AS Q

?

Приведенный выше запрос не работает. Ошибкапроисходит: "Неверное имя объекта 'Q.TableName'".

Возможно ли это в SQL Server 2005 с использованием только простых запросов (без хранимых процедур)?

Пример данных:

TableName | ColumName 

SomeTable1 | Column11
SomeTable1 | Column12
SomeTable2 | Column21
SomeTable2 | Column22
SomeTable3 | Column31

Я бы хотел, чтобы каждая строка из этого sample data имела больше атрибутов:

TableName | ColumName | CountInThatTable | AvgValueInThatColumnFromThatTable

SomeTable1 | Column11 | N1               | N11
SomeTable1 | Column12 | N1               | N12
SomeTable2 | Column21 | N2               | N21
SomeTable2 | Column22 | N2               | N22
SomeTable3 | Column31 | N3               | N31

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Если я правильно понял вашу проблему, то для достижения вашего результата вам нужен динамический запрос.Ниже приведен пример, который вы можете использовать для достижения своего результата.

DECLARE @TableName VARCHAR(100)
CREATE TABLE #tblRowCount (Id INT IDENTITY(1,1),
                           TableName VARCHAR(100), 
                           NoOfRows int)
DECLARE cur_trav  CURSOR FOR SELECT Name FROM sys.tables
OPEN cur_trav
FETCH NEXT FROM cur_Trav INTO @tableName
DECLARE @SQL VARCHAR(5000)

WHILE @@FETCH_STATUS =0
BEGIN
SET @SQL =''
SET @SQL = ' INSERT INTO #tblRowCount (tableName, NoOfRows)  SELECT ''' + @TableName +''' as tableName , COUNT(1) as counter FROM ' + @TableName 
EXECUTE(@SQL)
--  --PRINT @sql
  FETCH NEXT FROM cur_Trav  
END 
CLOSE cur_Trav
DEALLOCATE cur_trav

SELECT Id,tableName, NoOfRows FROM #tblRowCount
DROP TABLE #tblRowCount
0 голосов
/ 18 мая 2018

Если вам нужно количество строк, возвращаемых запросом, в отдельном столбце в каждой строке, используйте функции окна:

select . . .,
       count(*) over () as overall_cnt
from . . .;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...