|
sachinj
Starting Member
1 Post |
Posted - 2012-02-06 : 02:08:28
|
| I have below Oracle query that needs to be converted to T-SQL ( SQL Server 2005/2008 compatible). Please could any one help me with this. SELECT CONNECT_BY_ROOT user_id user_id, acct_id, acct_name, 'Yes' property FROM (SELECT a.*, u.user_id, u.acct_id u_acct_id FROM accounts a, user_account u WHERE a.acct_id = u.acct_id(+) AND u.property(+) = 'Yes') tSTART WITH acct_id = u_acct_idCONNECT BY acct_id = PRIOR acct_parent ORDER BY user_id, acct_idBelow is the DDL/DMLs to create the schema and data :--Create TablesCREATE TABLE ACCOUNTS( ACCT_ID INTEGER NOT NULL, ACCT_NAME VARCHAR(25) NOT NULL, ACCT_PARENT INTEGER, ACCT_TYPE INTEGER NOT NULL);CREATE TABLE USER_ACCOUNT( USER_ID INTEGER NOT NULL, ACCT_ID INTEGER NOT NULL, PROPERTY VARCHAR(15) NOT NULL);--Insert values into tablesINSERT INTO ACCOUNTS (ACCT_ID,ACCT_NAME,ACCT_PARENT,ACCT_TYPE)VALUES (1,'Group1',0,1);INSERT INTO ACCOUNTS (ACCT_ID,ACCT_NAME,ACCT_PARENT,ACCT_TYPE) VALUES (2,'Group2',1,1);INSERT INTO ACCOUNTS (ACCT_ID,ACCT_NAME,ACCT_PARENT,ACCT_TYPE)VALUES (3,'Group3',2,1);INSERT INTO ACCOUNTS (ACCT_ID,ACCT_NAME,ACCT_PARENT,ACCT_TYPE)VALUES (4,'Account1', 3,0);INSERT INTO ACCOUNTS (ACCT_ID,ACCT_NAME,ACCT_PARENT,ACCT_TYPE)VALUES (5,'Account2',3,0);INSERT INTO ACCOUNTS (ACCT_ID,ACCT_NAME,ACCT_PARENT,ACCT_TYPE) VALUES (6,'Account3',2,0);INSERT INTO ACCOUNTS (ACCT_ID,ACCT_NAME,ACCT_PARENT,ACCT_TYPE)VALUES (7,'Account4',0,0);INSERT INTO ACCOUNTS (ACCT_ID,ACCT_NAME,ACCT_PARENT,ACCT_TYPE)VALUES (8,'Account5',1,0);INSERT INTO USER_ACCOUNT (USER_ID, ACCT_ID, PROPERTY) VALUES (1, 4, 'Yes');INSERT INTO USER_ACCOUNT (USER_ID, ACCT_ID, PROPERTY) VALUES (2, 5, 'No');INSERT INTO USER_ACCOUNT (USER_ID, ACCT_ID, PROPERTY) VALUES (3, 6, 'Yes');--------------------------------------------------ACCOUNTS table stores results in parent child relationship format.ACCT_TYPE=0 in ACCOUNTS table denotes leaf node. ACCT_ID ACCT_NAME ACCT_PARENT ACCT_TYPE---------- -------------------------------------------------- ----------- ---------- 1 Group1 0 1 2 Group2 1 1 3 Group3 2 1 4 Account1 3 0 5 Account2 3 0 6 Account3 2 0 7 Account4 0 0 8 Account5 1 0Another table USER_ACCOUNT stores user permissions on the leaf nodes from ACCOUNTS table. USER_ID ACCT_ID PROPERTY---------- ---------- ---------- 1 4 Yes 2 5 No 3 6 YesThis shows user=1 has permission on Account=4 , user=2 does not have access priviledge on Account=5.Now my requirement is to write a SQL query such that if the user has permissions on a given leaf node then all the parent / grand parent nodes should also be returned. Expected output for me would be :USER_ID ACCT_ID ACCT_NAME PROPERTY---------- ---------- -------------------------------------------------- ----------- 3 1 Group1 Yes 3 2 Group2 Yes 3 6 Account3 Yes 1 1 Group1 Yes 1 2 Group2 Yes 1 3 Group3 Yes 1 4 Account1 Yessachin jauhari |
|