2013-03-14 4 views
0

Использование SQL Server 2012 .... Этот код работает как автономный сценарий, но мне нужно значение, возвращенное в iif(...) вложен в Case...when как часть более крупного сценария:Адаптация С/КТР заявление

with GroupedValues (Value, Frequency, SelectingCriteria) AS 
(Select 
    Table1.Cost as Value, 
    Count(*) as Frequency, 
Table2.AccountNumber as SelectingCriteria 

from Table1, Table 2 
) 

Group by Table1.Cost, Table2.AccountNumber) 

Select 
    Max(Value) as Value 
From GroupedValues a INNER JOIN 
    (select Max(Frequency) AS MaxFrequency 
    from GroupedValues) b 
on a.Frequency=b.MaxFrequency 
+1

Это ваш фактический код? Это не похоже на действующий код. – Taryn

+0

Сначала избавьтесь от приключений и присоединитесь к 21-му веку! – HLGEM

+0

Правильно ли я понимаю вас, вы бы поставили вышеуказанный код внутри IIF, который затем является частью инструкции CASE? – billinkc

ответ

0

Я считаю, что вы просто так:

select top 1 
    Value 
from (
    select 
    Table1.Cost, Table2.AccountNumber 
    Count(*) as Frequency, 
    Table1.Cost as Value 
    from Table1 cross join Table2 
    group by Table1.Cost, Table2.AccountNumber, Table1.Cost 
) T 
order by 
    Frequency desc, 
    Value desc 
+1

Не увековечивайте использование соединений implict, которые являются антиспамом SQL – HLGEM

+0

@HLGEM: Это крест-соединение, а не внутреннее или внешнее соединение; единственное обстоятельство, в котором я терплю этот синтаксис сам. Вы проповедуете обращенному. –

+3

Это очень хороший синтаксис называется CROSS JOIN. Это проще и проще в обслуживании. Я особенно не ставил CROSS JOIN в неявный синтаксис, так как сторонники не будут знать, было ли это предназначено как один или был ошибкой. – HLGEM

Смежные вопросы