2014-04-21 3 views
0

Я использую следующее заявление для возврата значения из table.But здесь я получаю сообщение об ошибке, как The multi-part identifier "a.NoOfLocks" could not be bound.подзапросов соглашения об именовании

SQL-оператор приведен ниже

select count(cu.CashsafeUserId) as NoOfUsers ,a.NoOfLocks as 'NoOfLocks', 
    (select count(CashSafeLockId) as NoOfLocks 
     from CashSafeLocks cl inner join Cashsafes c 
     on c.CashsafeId=cl.CashSafeId 
     where c.cashsafeid=22) as a 
from CashsafeUsers cu inner join Cashsafes c 
    on c.CashsafeId=cu.CashSafeId 
where c.CashsafeId=22 

Любая помощь будет оценена.

+0

Я поставил '', ''в моем sqlquery и теперь сообщение об исключении отличается. Я обновил вопрос PLS в нем – SparAby

ответ

2

Вы можете использовать вспомогательный запрос для вычисления значения NoOfLocks для того же идентификатора
Попробуйте это:

select count(cu.CashsafeUserId) as NoOfUsers , 
    (select count(CashSafeLockId) 
     from CashSafeLocks cl inner join Cashsafes c 
     on c.CashsafeId=cl.CashSafeId 
     where c.cashsafeid=22) as NoOfLocks 
from CashsafeUsers cu inner join Cashsafes c 
    on c.CashsafeId=cu.CashSafeId 
where c.CashsafeId=22 

В качестве альтернативы можно использовать производную таблицу, решение должно быть что-то вдоль этих линий:

select count(cu.CashsafeUserId) as NoOfUsers , a.NoOfLocks 
from CashsafeUsers cu inner join Cashsafes c 
    on c.CashsafeId=cu.CashSafeId 
    left outer join 
    (select count(CashSafeLockId)as NoOfLocks, cc.CashsafeId as CashsafeId 
     from CashSafeLocks cl inner join Cashsafes cc 
     on cc.CashsafeId=cl.CashSafeId 
     Group BY cc.CashsafeId 
    ) as a on c.CashsafeId= a.CashsafeId 
where c.CashsafeId=22 
+0

Большое спасибо для вашего ответа, но что я делаю неправильно в приведенном выше высказывании – SparAby

+1

Мне кажется, что вы пытаетесь создать производную таблицу в 'SELECT' части инструкции. Вместо этого вы можете использовать дополнительный запрос, который даст результат немедленно '(выберите count ....) как NoOfLocks' – Milen

0
select count(cu.CashsafeUserId) as NoOfUsers,count(CashSafeLockId) as NoOfLocks 
from CashsafeUsers cu 
inner join Cashsafes c on c.CashsafeId=cu.CashSafeId 
full outer join CashSafeLocks cl on c.CashsafeId=cl.CashSafeId and cu.CashsafeId=cl.CashSafeId 
where cu.CashsafeId=22 
Смежные вопросы