C # SQL Server VIEW Query - PullRequest
       13

C # SQL Server VIEW Query

3 голосов
/ 12 января 2011

Мне нужно создать запрос VIEW ...

Например:

Name                   Count
------------------------------
Kaganoff Benzion       122  
Van Gennep             443  
Michelen Luis          656  
kraig Beno             333  
Mogrobejo Endika       555  

* все имена в столбце «Имя», содержащие два слова с пробелом между ними.

Теперь мне нужно упорядочить по ПЕРВОЙ букве первого слова и ПЕРВОЙ букве второго слова по возрастанию и по убыванию числа ...

Результат должен быть:

Name                   Count
------------------------------
kraig Beno             333  
Kaganoff Benzion       122  
Mogrobejo Endika       555  
Michelen Luis          656  
Van Gennep             443  

Посмотрим, сможете ли вы:)

Ответы [ 3 ]

3 голосов
/ 12 января 2011

что-то вроде этого запроса должно работать (я настроил свою временную таблицу с вашими данными)

create table #Temp (Name varchar(100), [Count] int)
insert into #Temp (Name, [Count]) VALUES ('Kaganoff Benzion', 122)
insert into #Temp (Name, [Count]) VALUES ('Van Gennep', 443)
insert into #Temp (Name, [Count]) VALUES ('Michelen Luis', 656)
insert into #Temp (Name, [Count]) VALUES ('kraig Beno', 333)
insert into #Temp (Name, [Count]) VALUES ('Mogrobejo Endika', 555)

select
SUBSTRING(Name, 1, PATINDEX('% %', Name)) AS FirstName,
SUBSTRING(Name, PATINDEX('% %', Name) + 1, LEN(Name) - PATINDEX('% %', Name)) AS SecondName,
[Count]
from #Temp
ORDER BY SUBSTRING(Name, 1, 1), SUBSTRING(Name, PATINDEX('% %', Name) + 1, 1), [Count] DESC

drop table #Temp
2 голосов
/ 12 января 2011

Я бы пошел об этом с общим табличным выражением.

DECLARE @data TABLE (Name varchar(50), NameCount int);

INSERT INTO @data (Name, NameCount)
SELECT 'Kaganoff Benzion', 122
UNION SELECT 'Van Gennep', 443
UNION SELECT 'Michelen Luis', 656
UNION SELECT 'kraig Beno', 333
UNION SELECT 'Mogrobejo Endika', 555;

--Now that we have the data setup, use a CTE...

WITH NamesAndLetters AS
(
    SELECT 
          SUBSTRING(UPPER(Name), 1, 1) [FirstNameLetter]
        , SUBSTRING(UPPER(Name), PATINDEX('% %', Name) + 1, 1) [LastNameLetter]
        , Name
        , NameCount
    FROM @data
)
SELECT Name, NameCount
FROM NamesAndLetters 
ORDER BY 
      FirstNameLetter ASC
    , LastNameLetter ASC
    , NameCount DESC

Извините за первое сообщение ... Сначала я не видел, чтобы Имя было одним столбцом.

0 голосов
/ 12 января 2011

Если я просто не понимаю ваш вопрос ... Можно полностью разделить один столбец в предложении Order By, не влияя на вывод.

Пример:

Select [Name], [Count]
from [YourView]
Order By 
    Substring([Name], 1, 1) , 
    SUBSTRING([Name], PATINDEX('% %', [Name]) + 1, PATINDEX('% %', [Name]) + 2), 
    [Count] Desc

Может быть, я просто сбит с толку, вы хотите получить счет или?Независимо от того, вывод этого точно соответствует вашему запросу.

...