Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите написать SQL запрос  [new]
AlexanderVolgin
Member [заблокирован]

Откуда:
Сообщений: 6
Таблица "Договоры". Клиент может иметь заключенные договоры разных типов в
одном или нескольких банках

contract Договоры
------------
id int идентификатор договора, первичный ключ
type_id int тип договора, внешний ключ
id_client int клиент, внешний ключ
id_bank int банк, внешний ключ
stat int статус договора (0 - действующий, 1 - недействующий)
name varchar(30) номер договора


Нужно написать запрос, возвращающий:


4) Список открытых договоров, пронумерованных по порядку (1,2,3,... без
пропусков номеров) для каждого банка. Эти номера не содержатся в таблице, т.е.
должны быть вычисляемым полем.
Т.е., №№ 1,2,3, ..., N для банка A, 1,2,3, ..., M для банка B, и т.д.

5) Написать запрос, выводящий список id клиентов у которых нет договоров в
самом крупном банке (с максимальным кол-вом открытых договоров)
(здесь скрипт писать)
26 июл 11, 23:08    [11031086]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать SQL запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
AlexanderVolgin
Нужно написать запрос, возвращающий:
А какой ваш вариант?
26 июл 11, 23:31    [11031143]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать SQL запрос  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
AlexanderVolgin,

DECLARE @contracts TABLE (id int 
,type_id_c int 
,id_client int 
,id_bank int 
,stat int 
,name_c varchar(30) )
INSERT INTO @contracts
 SELECT 1,1,1,1,1,'1'
UNION ALL  SELECT 3,1,1,1,1,'1'
UNION ALL  SELECT 6,1,3,1,1,'1'
UNION ALL  SELECT 5,1,3,5,1,'1'

--1
SELECT  
 ROW_NUMBER() OVER (PARTITION BY id_client ORDER BY ID)
,*
FROM @contracts
26 июл 11, 23:32    [11031158]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать SQL запрос  [new]
AlexanderVolgin
Member [заблокирован]

Откуда:
Сообщений: 6
alexeyvg,

я сам не понимаю, как это сделать, понимал бы не стал спрашивать. Есть только предположения.
26 июл 11, 23:44    [11031206]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать SQL запрос  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
AlexanderVolgin,

DECLARE @contracts TABLE (id int 
,type_id_c int 
,id_client int 
,id_bank int 
,stat int 
,name_c varchar(30) )
INSERT INTO @contracts
 SELECT 1,1,1,1,1,'1'
UNION ALL  SELECT 3,1,1,1,1,'1'
UNION ALL  SELECT 6,1,3,1,1,'1'
UNION ALL  SELECT 7,1,3,5,1,'1'
UNION ALL  SELECT 9,1,8,8,1,'1'


--1
SELECT  
 ROW_NUMBER() OVER (PARTITION BY id_client ORDER BY ID)
,*
FROM @contracts


--2 
 ;WITH a AS 
   (SELECT 
           ROW_NUMBER() OVER (PARTITION BY id_bank ORDER BY ID) AS r
          ,id_bank
    FROM @contracts )
   ,b AS 
    (
     SELECT MAX(r) rm
      FROM a
    )
   ,c as -- get big bank
    (
   SELECT id_bank 
   FROM   b
   JOIN   a
     ON   b.rm = a.r
    )
   ,d AS -- get clients for big bank
   (
  SELECT DISTINCT id_client 
  FROM   @contracts co
  JOIN   c 
    ON   co.id_bank=c.id_bank
   )
  SELECT DISTINCT c.id_client 
  FROM   @contracts c
  LEFT OUTER JOIN d
    ON d.id_client =c.id_client
  WHERE  d.id_client IS NULL
    
26 июл 11, 23:56    [11031250]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить