powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / множественный выбор из таблицы по условию case. Помогите решить.
7 сообщений из 7, страница 1 из 1
множественный выбор из таблицы по условию case. Помогите решить.
    #39935870
ant_sol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
коллеги, добрый день.
помогите решить задачу: есть таблица (DBO.DBM_ACCES) пользователей с уровнями доступа следующего вида
UserID BranchIDFullAccessUser 99999999TestUser1 11111TestUser2 22222

необходимо сделать чтобы если передан в качестве параметра UserID = 'FullAccessUser', то выводились все записи из таблицы DBO.Test_table (в таблице DBO.Test_table есть поле BranchID ), а если отличный от него то только те записи, которые соответсвуют значениям BranchID соответствующего пользователя (UserID).


пишу такой код, но он возвращает ошибку:

Код: sql
1.
2.
3.
4.
5.
6.
7.
ALTER   function [dbo].[DBM_FILIALS] (@UserID as varchar (125)) RETURNS TABLE
select 	* from DBO.Test_table B
where B.BranchID in 
		(case 
			when (SELECT BranchID from DBO.DBM_ACCESS where UserID=@UserID) in (99999999) then (SELECT distinct BranchID from DBO.Test_table) 
			else (SELECT BranchID from DBO.DBM_ACCESS where UserID=@UserID) 
		end ID)
...
Рейтинг: 0 / 0
множественный выбор из таблицы по условию case. Помогите решить.
    #39935877
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ant_sol,


...
Код: sql
1.
2.
3.
4.
where
UserID=isnull(@UserID ,UserID)
or
@UserID= 99999999
...
Рейтинг: 0 / 0
множественный выбор из таблицы по условию case. Помогите решить.
    #39935879
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
ALTER   function [dbo].[DBM_FILIALS] (@UserID as varchar (125)) RETURNS TABLE
AS
RETURN
select 	B.* from DBO.Test_table B
left join DBO.DBM_ACCESS A on A.BranchID=B.BranchID and A.UserID=@UserID
where A.BranchID is not null or @UserID='FullAccessUser';
...
Рейтинг: 0 / 0
множественный выбор из таблицы по условию case. Помогите решить.
    #39935906
ant_sol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court
Код: sql
1.
2.
3.
4.
5.
6.
ALTER   function [dbo].[DBM_FILIALS] (@UserID as varchar (125)) RETURNS TABLE
AS
RETURN
select 	B.* from DBO.Test_table B
left join DBO.DBM_ACCESS A on A.BranchID=B.BranchID and A.UserID=@UserID
where A.BranchID is not null or @UserID='FullAccessUser';



спасибо, но это работает когда FullAccessUser только один в таблице DBO.DBM_ACCESS, подскажите, пожалуйста, как должен выглядеть когда когда пользователей с общим доступом несколько (поле BranchID у всех одинаковое), например:

UserID BranchIDFullAccessUser 99999999FullAccessUser1 99999999FullAccessUser2 99999999FullAccessUser3 99999999
...
Рейтинг: 0 / 0
множественный выбор из таблицы по условию case. Помогите решить.
    #39935909
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ant_sol
court
Код: sql
1.
2.
3.
4.
5.
6.
ALTER   function [dbo].[DBM_FILIALS] (@UserID as varchar (125)) RETURNS TABLE
AS
RETURN
select 	B.* from DBO.Test_table B
left join DBO.DBM_ACCESS A on A.BranchID=B.BranchID and A.UserID=@UserID
where A.BranchID is not null or @UserID='FullAccessUser';




спасибо, но это работает когда FullAccessUser только один в таблице DBO.DBM_ACCESS, подскажите, пожалуйста, как должен выглядеть когда когда пользователей с общим доступом несколько (поле BranchID у всех одинаковое), например:

UserID BranchIDFullAccessUser 99999999FullAccessUser1 99999999FullAccessUser2 99999999FullAccessUser3 99999999
ну, так например
Код: sql
1.
2.
3.
4.
5.
6.
7.
ALTER   function [dbo].[DBM_FILIALS] (@UserID as varchar (125)) RETURNS TABLE
AS
RETURN
select 	B.* from DBO.Test_table B
left join DBO.DBM_ACCESS A on A.BranchID=B.BranchID and A.UserID=@UserID
where A.BranchID is not null 
   or exists(select 1 from DBO.DBM_ACCESS C where C.UserID=@UserID and C.BranchID=99999999);
...
Рейтинг: 0 / 0
множественный выбор из таблицы по условию case. Помогите решить.
    #39935917
ant_sol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, спасибо большое !
...
Рейтинг: 0 / 0
множественный выбор из таблицы по условию case. Помогите решить.
    #39936355
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ant_sol,
а потом вам захочется сделать еще и проверку по группам
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
DROP TABLE IF EXISTS #acl
;
CREATE TABLE #acl (
  [user]    VARCHAR(128),
  [branch]  INT,
  [mod]     INT, /*flags: 1 - select, 2 - update, 4 - delete*/
  INDEX [#ci_acl] CLUSTERED ( [user], [branch] )
)
;
INSERT INTO
  #acl
VALUES
  ( 'admin', NULL, 7 ),
  ( 'user1', 1, 3 ),
  ( 'user2', 2, 7 )
;
DROP TABLE IF EXISTS #test
;
CREATE TABLE #test (
  [branch] INT,
  [data]   VARCHAR(20),
  [update] DATETIME,
  INDEX [#ci_test] CLUSTERED ( [branch] )  
)
;
INSERT INTO
  #test
VALUES
  ( 1, '1111111', SYSDATETIME() ),
  ( 2, '2222222', SYSDATETIME() ),
  ( 3, '3333333', SYSDATETIME() ),
  ( 4, '4444444', SYSDATETIME() )
;
SELECT
  tst.*
FROM
  #acl acl
  INNER JOIN #test tst ON
        tst.[branch] = ISNULL( acl.[branch], tst.[branch] )
WHERE
  acl.[user] = 'admin'
  AND 1 = 1 & acl.[mod]
;
SELECT
  tst.*
FROM
  #acl acl
  INNER JOIN #test tst ON
        tst.[branch] = ISNULL( acl.[branch], tst.[branch] )
WHERE
  acl.[user] = 'user1'
  AND 1 = 1 & acl.[mod]
;
UPDATE
  tst
SET
  tst.[update] = DATEADD( DAY, 1, tst.[update] )
FROM
  #acl acl
  INNER JOIN #test tst ON
        tst.[branch] = ISNULL( acl.[branch], tst.[branch] )
WHERE
  acl.[user] = 'user1'
  AND 2 = 2 & acl.[mod]
;
DELETE
  tst
FROM
  #acl acl
  INNER JOIN #test tst ON
        tst.[branch] = ISNULL( acl.[branch], tst.[branch] )
WHERE
  acl.[user] = 'user2'
  AND 4 = 4 & acl.[mod]
;
SELECT * FROM #test
;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / множественный выбор из таблицы по условию case. Помогите решить.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]