0

次のようなテーブル構造があります。

CREATE TABLE Item
(
  ItemKey BIGINT,
  DisplayName VARCHAR(100)
)

INSERT INTO Item VALUES (136172,'Computer')
INSERT INTO Item VALUES (156737,'Car')

CREATE TABLE ItemTypeFactvw
(
   ItemKey BIGINT,
   TypeDimKey BIGINT
)

INSERT INTO ItemTypeFactvw VALUES (136172,483)
INSERT INTO ItemTypeFactvw VALUES (136172,1353)
INSERT INTO ItemTypeFactvw VALUES (156737,1000)

CREATE TABLE ItemTypeDimvw
(
  Id BIGINT,
  BaseId BIGINT,
  TypeDimKey BIGINT,
  DisplayName VARCHAR(100)

)

INSERT INTO ItemTypeDimvw VALUES (1,80,483,'IT Gadgets')
INSERT INTO ItemTypeDimvw VALUES (3,1,1353,'Electronics')
INSERT INTO ItemTypeDimvw VALUES (2,44,1000,'Vehicle')

次のような結果を生成する必要があります(目的の出力):

| ITEMKEY | DISPLAYNAME | TYPEDIMKEY | ID | BASEID | ITEM BASE TYPE |
---------------------------------------------------------------------
|  136172 |    Computer |        483 |  1 |     80 |    Electronics |
|  156737 |         Car |       1000 |  2 |     44 |        Vehicle |

これは私が持っているクエリです:

SELECT i.ItemKey, 
        i.DisplayName, 
        it.TypeDimKey,
        itd.Id,
        itd.BaseId,
        itd.DisplayName 'Item Base Type'
  FROM Item i
INNER JOIN ItemTypeFactvw it
on i.ItemKey = it.ItemKey
INNER JOIN  ItemTypeDimvw itd
ON itd.TypeDimKey = it.TypeDimKey

ItemTypeDimvw上記のクエリは、 where DisplayNameisから追加のレコードも取得するため、目的の出力を生成しません"IT Gadgets"

これをクラス階層と考えてください。ITガジェットはエレクトロニクスから受け継がれています。したがって、この場合は基本タイプを表示する必要があります。IT ガジェットの電子機器です。

http://sqlfiddle.com/#!3/ef094/1

4

1 に答える 1

2

これは、あなたの望むことですか?

select  i.ItemKey, 
        i.DisplayName, 
        it.TypeDimKey,
        itd.Id,
        itd.BaseId,
        itd.DisplayName 'Item Base Type'
  from Item i
inner join ItemTypeFactvw it
on i.ItemKey = it.ItemKey
inner join ItemTypeDimvw itd
on itd.TypeDimKey = it.TypeDimKey
left outer join ItemTypeDimvw itd2
on itd2.id = itd.BaseId
where itd2.id is null
于 2013-02-19T22:20:44.457 に答える