2012-04-23 18 views
0

私の会社のデスクトップと現在インストールされているソフトウェアプログラムに関するレポートを作成しています。1行の列に情報を一度表示するが、同じ結果セット内の複数行の列に情報を表示し続ける方法は?

たとえば、マシンごとに1行しか返さないことが保証されている3つの列:Location, Last_logged-on_User, Machine_Nameと1つ以上の行を返す列:Softwareがあるとします。最初の行には、ソフトウェア行の最初の行と、ソフトウェア行のみを表示している行の残りの行だけでなく、1行の列も空白で埋めてください。

Location Last_logged-on_User Machine_Name Software_name 
Venus James.Jiao   McKain  Internet Explorer 
              Firefox 
              Antivirus X 
              Office Suite 
Mars  Veronica.Mars  Obama  Internet Explorer 
              Google Chrome 
              Adobe Acrobat 
Jupiter Taylor.Swift  Bachmann  Opera 
              Speech Helper 
              Dictionary for Kids 

私は、このためのクエリを探していますが、私はいくつかの行では単列、列、条件付きで空白に方法を考えることはできませんとしてこれを起動するかどうかはかなりわかりません。ここで

は、テーブル構造は、あなたが

Create table Machine 
(
    machine_id int not null, 
    machine_name varchar(25) not null, 
    last_logged-on_user varchar(25) not null, 
    location varchar(25) not null 
) 

Create table SoftwareList 
( 
    machine_id int not null, 
    software_name varchar(25) not null 
) 
+0

私はテーブル構造を含めました – deutschZuid

答えて

4

それを必要とする場合には、それはサブクエリで最初に出現したかどうかを確立するためのRow_Number() Over (Partition byを使用することができ、その後、行番号がある場合にのみ、戻り場所にcase文を使用しています

を助け1.

SELECT 
    CASE WHEN RowNo = 1 OR RowNo IS NULL THEN location ELSE '' END as Location, 
    Software_name 

FROM (
    SELECT 
     sl.Software_name , 
     m.location, 
     ROW_NUMBER() OVER(Partition by location ORDER by location) as rowNo 
    FROM Machine m 
    LEFT JOIN Softwarelist sl 
    ON sl.Machine_id = m.machine_id 


) d 

参照SQLフィドルhere

・ホープ

+0

これは魅力的です。私はrow_number()が何らかの形で関与していると思っていましたが、それを超えて精神的な鋭敏さはありませんでした! – deutschZuid

関連する問題