0

次の行があります。

 ID             fk_id       type    comment user    ticket
-----------------------------------------------------------
000000658       135         notes   afdads  abas1   0000000000
000000658       999999      admin           NULL    0000000000
000000659       136         notes   afadsf  admin   0000000001
000000659       999999      admin           NULL    0000000001
000000660       999999      admin           NULL    0000000000
000000661       999999      admin           NULL    0000000006

ID が 000000658 である行を返したいのですが、ユーザーが null ではない単一の結果のみを返す必要がありますが、以下に示すように、同じ結果が ID = 000000659 who's user is null も返す必要があります。

 ID             fk_id       type    comment user    ticket
-----------------------------------------------------------
000000658       135         notes   fdads   abas1   0000000000
000000659       999999      admin           NULL    0000000001
000000660       999999      admin           NULL    0000000000
000000661       999999      admin           NULL    0000000006

私のケースは、ダッシュボードにすべての苦情を表示し、ユーザーに自分のコメントを表示することです。

私のケースは次のとおりです:私は2つのテーブルに苦情と苦情_詳細を持っており、私のページにログインするたびにすべての苦情を表示する必要がありますが、ユーザーがチケット番号に入力したコメントのみを表示する必要があります。このために、クエリが :select * from ( であるビューを作成します

SELECT 
            COMPLAINT.COMP_TICKET_NUM,
            999999 COMPLAINT_DETAIL_ID ,
            'admin' FLAG,--TO be discuss
            ' ' NOTES,
            null LOGIN_USER,
            CURRENT_STATE, CURRENT_ACTOR,CALCULATED_ACTOR,CURRENT_ORG_UNIT--,
            --TEMP_FLAG
FROM         dbo.COMPLAINT 
left outer join COMPLAINT_DETAIL on COMPLAINT_DETAIL.COMP_TICKET_NUM = COMPLAINT.COMP_TICKET_NUM 
--where COMPLAINT_DETAIL.LOGIN_USER   in ('admin')
union
SELECT 
            COMPLAINT.COMP_TICKET_NUM,
            COMPLAINT_DETAIL.COMPLAINT_DETAIL_ID,
            isnull(COMPLAINT_DETAIL.FLAG,'admin') FLAG,--TO be discuss
            COMPLAINT_DETAIL.NOTES,
            COMPLAINT_DETAIL.LOGIN_USER,

        CURRENT_STATE, CURRENT_ACTOR,CALCULATED_ACTOR,CURRENT_ORG_UNIT--,
            --TEMP_FLAG
FROM         dbo.COMPLAINT 

inner join  COMPLAINT_DETAIL 
on COMPLAINT_DETAIL.COMP_TICKET_NUM =COMPLAINT.COMP_TICKET_NUM
4

4 に答える 4

0

必要なのはroqwレベルのアクセスだと思います。これは以下のように達成できます。フロントエンドから使用している場合は、ユーザーにログインを求めている必要があります。私が言っているのは、ユーザー名があるということです。次に、特定のユーザーからアクセスされるレコードを特定する必要があります。2 つの列を含めることができます。特定の行に対するそのユーザーの権利と他のユーザーの権利を定義します。ユーザーが現在のユーザーではなく、コメントが null であるすべてのレコードは、すべてのレコードで利用できます。AND コメントが null でない場合、そのユーザーのみが利用できます。

これにはより複雑な作業が必要でした。アイデアを提供しようとしています。詳細が必要な場合は更新してください。

よろしく

アシュトッシュ・アリア

于 2013-08-05T05:40:22.990 に答える
0

簡単な答えは次のとおりです。

SELECT * 
FROM   TABLE1 
WHERE  ( ID = '000000658' 
         AND USER IS NOT NULL ) 
        OR ( ID = '000000659' 
             AND USER IS NULL ) 

しかし、もっと複雑なものが欲しいと感じています。
他に何が欲しいか教えてください。追加します:-)

編集 いくつかの明確化の後、より良い解決策があります:

DECLARE @curr_user VARCHAR(20) = '000000658' 

SELECT ID, 
       FK_ID, 
       TYPE, 
       CASE 
         WHEN @curr_user = USER THEN COMMENT 
         ELSE '' 
       END comment, 
       USER, 
       TICKET 
FROM   TABLE1 

要求に応じて、現在のユーザー (ID はパラメーターで渡されます) はすべての苦情を見ることができますが、自分のコメントしか見ることができません。
これにさらに詳細を追加する必要がある場合は、お知らせください。

于 2013-08-05T05:08:42.763 に答える
0

あなたはそれを試すことができます

Select * From TableName Where User='abas1' or User is null
于 2013-08-05T05:11:04.057 に答える