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

Откуда:
Сообщений: 378
Microsoft SQL Server 2008 (SP1) - 10.0.2573.0 (X64) 
	Feb  4 2011 11:27:06 
	Copyright (c) 1988-2008 Microsoft Corporation
	Standard Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2)


таблица с наполнением:
/****** Object:  Table [dbo].[Table_1]    Script Date: 10/02/2012 14:42:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_1](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[F1] [nvarchar](3) NULL,
	[F2] [nvarchar](3) NULL,
	[F3] [nvarchar](3) NULL,
	[F4] [nvarchar](3) NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Table_1] ON
INSERT [dbo].[Table_1] ([id], [F1], [F2], [F3], [F4]) VALUES (1, N'a', N'4', N'b', N'1')
INSERT [dbo].[Table_1] ([id], [F1], [F2], [F3], [F4]) VALUES (2, N'5', N'a', N'a', N'7')
INSERT [dbo].[Table_1] ([id], [F1], [F2], [F3], [F4]) VALUES (3, N'b', N'11', N'a', N'b')
SET IDENTITY_INSERT [dbo].[Table_1] OFF

Необходимо написать запрос, который бы выводил:

idF1F2F3F4"КОЛИЧЕСТВО ЦИФР В СТРОКЕ""СУММА ЦИФР""КОЛИЧЕСТВО СИМВОЛОВ "A"""КОЛИЧЕСТВО СИМВОЛОВ "B""
1a4b12511
25aa72122NULL
3b11ab11112
2 окт 12, 12:49    [13254935]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
количество [Fi] именно 4 или произвольно?
2 окт 12, 13:05    [13255115]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
Primus inter pares
Member

Откуда: Волшебная страна
Сообщений: 75
select *, 
	ISNUMERIC(F1) + ISNUMERIC(F2) + ISNUMERIC(F3) + ISNUMERIC(F4) CountNums,
	CASE ISNUMERIC(F1) WHEN 1 THEN CAST(F1 AS INT) ELSE 0 END +
	CASE ISNUMERIC(F2) WHEN 1 THEN CAST(F2 AS INT) ELSE 0 END +
	CASE ISNUMERIC(F3) WHEN 1 THEN CAST(F3 AS INT) ELSE 0 END +
	CASE ISNUMERIC(F4) WHEN 1 THEN CAST(F4 AS INT) ELSE 0 END SumNums,
	CASE F1 WHEN 'a' THEN 1 ELSE 0 END +
	CASE F2 WHEN 'a' THEN 1 ELSE 0 END +
	CASE F3 WHEN 'a' THEN 1 ELSE 0 END +
	CASE F4 WHEN 'a' THEN 1 ELSE 0 END CountA,
	CASE F1 WHEN 'b' THEN 1 ELSE 0 END +
	CASE F2 WHEN 'b' THEN 1 ELSE 0 END +
	CASE F3 WHEN 'b' THEN 1 ELSE 0 END +
	CASE F4 WHEN 'b' THEN 1 ELSE 0 END CountB
from dbo.Table_1
2 окт 12, 13:40    [13255383]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
Fi произвольно
2 окт 12, 14:30    [13255836]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Primus inter pares,

прикольно: полагаете, что ISNUMERIC(F1)=1 гарантирует конвертируемость в INT?!
2 окт 12, 14:33    [13255868]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
Посетитель
Member

Откуда:
Сообщений: 1232
Primus inter pares,
а если f1 = 'a12'
цифр 2, их сумма 3, Ваше решение совершенно этого не учитывает
2 окт 12, 14:38    [13255910]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
Primus inter pares
Member

Откуда: Волшебная страна
Сообщений: 75
iap
Primus inter pares,
прикольно: полагаете, что ISNUMERIC(F1)=1 гарантирует конвертируемость в INT?!

Вовсе нет, просто по начальным данным я ничего кроме int не заметил.

Посетитель
Primus inter pares,
а если f1 = 'a12'
цифр 2, их сумма 3, Ваше решение совершенно этого не учитывает

Тогда бы в 3 строке сумма была бы 2, а не 11. Судя по условию это не так.
2 окт 12, 14:56    [13256103]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
Fi-31(30) Это дни месяца
2 окт 12, 15:02    [13256148]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
Тогда слишком много CASE-ов придется делать
2 окт 12, 15:03    [13256155]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
Посетитель
Member

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

Вы бы определились, Вам цифры или числа нужно считать/суммировать?
может ли быть в поле буквенно-числовое значение? как его обрабатывать?
2 окт 12, 15:14    [13256294]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
буквенно-числовой записи не будет. Там либо часы работы, либо символы-сокращения
2 окт 12, 15:20    [13256368]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
Посетитель
Member

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

если не хотите "много кейсов" - посмотрите в сторону UNPIVOT
2 окт 12, 15:26    [13256444]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
nickolay_fff
Fi-31(30) Это дни месяца

у вас реально таблица в 30+ полей из которых заполенных 1 или 2 в каждой строке ?
2 окт 12, 15:48    [13256630]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
Да, 30 полей. Заполнены все. А сделал так потому что если сделать по правильному, а потом разворачивать перекрестным запросом, записи будут нередактируемыми.
2 окт 12, 17:02    [13257346]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
nickolay_fff
Да, 30 полей. Заполнены все. А сделал так потому что если сделать по правильному, а потом разворачивать перекрестным запросом, записи будут нередактируемыми.
:-)

Записи в СУБД не бывают нередактируемыми, если есть доступ :-)
2 окт 12, 17:35    [13257570]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378


К сообщению приложен файл. Размер - 76Kb
2 окт 12, 18:15    [13257820]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
Не спорю. Вот это они заполняют. Сделать так было без лишнего гемороя.
2 окт 12, 18:16    [13257831]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
если правильно понял -то вот:
select id,f1,f2,f3,f4,cnt,sm,sa,sb
from table_1 t
cross apply(

	select
	count(case when f like '%[^0-9]%' then null else 1 end) cnt,
	sum(case when f like '%[^0-9]%' then 0 else f end) sm,
	sum(case when f ='a' then 1 else null end) sa,
    sum(case when f ='b' then 1 else null end) sb
	from(
		select f1 f union all
		select f2 union all
		select f3 union all
		select f4
	)z
)tmp



если кол-во столбцов, которое нужно вывести переменное - смотрите в сторону dinamic sql
2 окт 12, 23:31    [13258911]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
Благодарю :)
3 окт 12, 06:58    [13259304]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с запросом  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
select id_WorkName,FF1,FF2,FF3,FF4,
 sum(case  ISNUMERIC(F)  when 1  then 1 else 0 end) cou2, 
 sum(case when F='б' then 1 else 0 end) cou,
 sum(case when F='о' then 1 else 0 end) cou1,
 sum(case  ISNUMERIC(F) when 1 then cast(F as float) else 0 end) cou3,
 sum(case  ISNUMERIC(F)  when  1 then (cast(F as float)-NormWorkTime) else 0 end) PR,NormWorkTime 
from TABEL 
INNER JOIN 
WorkName ON WorkName.id_WorkName = TABEL.ID_WRKNAME  
INNER JOIN 
Department  ON Department.id_Department = WorkName.id_Dept
unpivot (F for field_name in ([FF1],[FF2],[FF3],[FF4]))tt
group by ID_WORKNAME 


Выдает сообщение
Сообщение 207, уровень 16, состояние 1, строка 3
Недопустимое имя столбца "FF1"

В чем может быть причина?
10 окт 12, 13:30    [13295583]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить