0

私はこれらのステートメントに参加しようとしています:

select min(len(Password)) as min, 
       max(len(Password)) as max, 
       avg(len(Password)) as avg 
FROM Customer.dbo.Password 

UNION ALL
select min(len(password2)) as min, 
       max(len(password2)) as max, 
       avg(len(password2)) as avg 
FROM website.dbo.password2

これらに:

SELECT c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, 'website' db FROM website.sys.all_columns as c INNER JOIN website.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like '%password%' AND type = 'U'

UNION
SELECT c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, 'Customer' db FROM Customer.sys.all_columns as c INNER JOIN Customer.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like '%password%' AND type = 'U' 

共通の列はありません。最初の 2 つの SELECT ステートメントは、パスワードの長さの最小値、最大値、および平均値の 3 つの列を生成し、次の 2 つの列は、パスワードが保持されている場所の colName、tableName、およびデータベース名を生成します。

純粋に視覚的な理由から、両方の結果セットを 1 つのテーブルに表示して、対応する最小値、最大値、平均値を適切な colName、tableName、および db に取得したいと考えています。

私はこのようにしてみました:

DECLARE @numberTable TABLE (link nvarchar(500), max int, min int, avg int)
INSERT INTO @numberTable

select 'link', min(len(Password)) as min, 
       max(len(Password)) as max, 
       avg(len(Password)) as avg 
FROM Customer.dbo.Password UNION ALL
select 'link', min(len(password2)) as min, 
       max(len(password2)) as max, 
       avg(len(password2)) as avg 
FROM website.dbo.password2

SELECT * FROM @numberTable ORDER BY max

DECLARE @myTable TABLE (link nvarchar(500), colName nvarchar(500), tableName   nvarchar(500), db nvarchar(500))
INSERT INTO @myTable

SELECT 'link', c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, 'website' db FROM website.sys.all_columns as c INNER JOIN website.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like '%password%' AND type = 'U' UNION

SELECT 'link', c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, 'Customer' db FROM Customer.sys.all_columns as c INNER JOIN Customer.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like '%password%' AND type = 'U' 

SELECT * FROM @myTable ORDER BY db

SELECT link
FROM @myTable
LEFT OUTER JOIN @numberTable
ON @myTable.link = @numberTable.link

残念ながら、これはうまくいきませんでした。

Microsoft SQL Server 2008 を使用しています。

私が求めていることが理にかなっていることを願っています。

4

2 に答える 2

1

を使用cross joinして、2つの無関係なテーブルを結合できます。

SELECT  c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName
,       o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName
,       'website' db 
,       pwd.[min]
,       pwd.[max]
,       pwd.[avg]
FROM    website.sys.all_columns as c 
INNER JOIN 
        website.sys.all_objects o 
ON      c.object_id = o.object_id 
CROSS JOIN
        (
        select min(len(Password)) as min, 
               max(len(Password)) as max, 
               avg(len(Password)) as avg 
        FROM   website.dbo.Password        
        ) as pwd
WHERE   c.name like '%password%' 
        AND type = 'U' 

UNION

SELECT  c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName
,       o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName
,       'Customer' db 
,       pwd.[min]
,       pwd.[max]
,       pwd.[avg]
FROM    Customer.sys.all_columns as c 
INNER JOIN 
        Customer.sys.all_objects o 
ON      c.object_id = o.object_id 
CROSS JOIN
        (
        select min(len(Password)) as min, 
               max(len(Password)) as max, 
               avg(len(Password)) as avg 
        FROM    Customer.dbo.Password        
        ) as pwd
WHERE   c.name like '%password%' 
        AND type = 'U'
于 2012-10-11T08:45:24.677 に答える
0

彼らが共通して持っている恣意的な何かを作成し、それらに参加します

Select * 
from
(
select 
       1 as RowID,
       min(len(Password)) as min,  
       max(len(Password)) as max,  
       avg(len(Password)) as avg  
FROM Customer.dbo.Password  

UNION ALL 
select 
       2,
       min(len(password2)) as min,  
       max(len(password2)) as max,  
       avg(len(password2)) as avg  
FROM website.dbo.password2 
) t1
inner join
(


SELECT 1 as RowID, c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, 'website' db FROM website.sys.all_columns as c INNER JOIN website.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like '%password%' AND type = 'U' 

UNION 
SELECT 2, c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, 'Customer' db FROM Customer.sys.all_columns as c INNER JOIN Customer.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like '%password%' AND type = 'U' 
) t2
    on t1.rowID = t2.rowID
于 2012-10-11T08:48:18.247 に答える