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

Откуда:
Сообщений: 40
Уважаемые, господа, прошу Вашей помощи!
Есть небольшой запросец, так вот задача заключается в том, чтобы добавить нумерацию строк результатов выборки.
То что написано в форуме и faq'е не подходит.


SELECT  count(Products.ProductName),
	Products.ProductName,
	convert(char(10),UserProducts.DateBought,101) as [date of bought],
	UserProducts.price,''
	
FROM Products
INNER JOIN 
	UserProducts 
ON
	Products.Id = UserProducts.ProductID
INNER JOIN 
	Users 
ON 
	UserProducts.UserID = Users.ID

where Users.ID=1 
group by UserProducts.price,Users.Name,Products.ProductName,UserProducts.DateBought


union all 
select '','total',(convert(char(10),GetDate(),101))as CurrentDate,sum(UserProducts.price),''
from UserProducts
where userid =1

union all
select '','','',null,name
from users
where id=1
CREATE TABLE [Products] (
	[ID] [int] IDENTITY (1, 1) NOT NULL ,
	[ProductName] [nvarchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
	[upsize_ts] [timestamp] NULL ,
	CONSTRAINT [aaaaaProducts2_PK] PRIMARY KEY  NONCLUSTERED 
	(
		[ID]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO


CREATE TABLE [UserProducts] (
	[index] [int] IDENTITY (1, 1) NOT NULL ,
	[UserId] [int] NULL CONSTRAINT [DF__UserProdu__UserI__7A9C383C] DEFAULT (0),
	[ProductID] [int] NULL CONSTRAINT [DF__UserProdu__Produ__7B905C75] DEFAULT (0),
	[DateBought] [datetime] NULL ,
	[Price] [money] NULL CONSTRAINT [DF__UserProdu__Price__7C8480AE] DEFAULT (0),
	[upsize_ts] [timestamp] NULL ,
	CONSTRAINT [aaaaaUserProducts_PK] PRIMARY KEY  NONCLUSTERED 
	(
		[index]
	)  ON [PRIMARY] ,
	CONSTRAINT [UserProducts_FK00] FOREIGN KEY 
	(
		[UserId]
	) REFERENCES [Users] (
		[ID]
	),
	CONSTRAINT [UserProducts_FK01] FOREIGN KEY 
	(
		[ProductID]
	) REFERENCES [Products] (
		[ID]
	)
) ON [PRIMARY]
GO

CREATE TABLE [Users] (
	[ID] [int] IDENTITY (1, 1) NOT NULL ,
	[Name] [nvarchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
	[upsize_ts] [timestamp] NULL ,
	CONSTRAINT [aaaaaUsers2_PK] PRIMARY KEY  NONCLUSTERED 
	(
		[ID]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO
31 авг 05, 16:39    [1833516]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
То что написано в форуме и faq'е не подходит.

Почему.
31 авг 05, 16:42    [1833547]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
EvAlex
Member

Откуда: Israel
Сообщений: 1001
ну слей результаты первого запроса в временную таблицу - нумерацию по FAQ, а затем добавь два UNIONa.

Или что-то не понимаю?
31 авг 05, 16:44    [1833559]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
sco
Member

Откуда:
Сообщений: 40
Он начинает перебирать все строки выборки и нумерует их "1", затем снова все строки и уже "2", т.е.

1 a 100.0
1 b 200.0
1 c 300.0
2 a 100.0
2 b 200.0
2 c 300.0
3 a 100.0
3 b 200.0
3 c 300.0
31 авг 05, 16:46    [1833583]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
sco
Member

Откуда:
Сообщений: 40
EvAlex
ну слей результаты первого запроса в временную таблицу - нумерацию по FAQ, а затем добавь два UNIONa.

Или что-то не понимаю?


необходимо сделать все в 1 запрос
31 авг 05, 16:48    [1833604]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
sco
EvAlex
ну слей результаты первого запроса в временную таблицу - нумерацию по FAQ, а затем добавь два UNIONa.

Или что-то не понимаю?


необходимо сделать все в 1 запрос

Почему?
31 авг 05, 16:49    [1833612]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
sco
Member

Откуда:
Сообщений: 40
На то она и интересная задача))))
31 авг 05, 16:52    [1833636]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
sco
На то она и интересная задача))))

А все же?

З.Ы. В факе, между прочим, есть способы, решающие задачу в один запрос.
31 авг 05, 16:55    [1833660]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
Брюлик
Member

Откуда:
Сообщений: 690
drop table #t
create table #t
(
col char(1),
col1 int
)
insert into #t values ('a',3)
insert into #t values ('b',3)
insert into #t values ('c',3)


select col,num,count(*)as c from #t left join numbers
on #t.col1>=numbers.num
group by col,num
31 авг 05, 16:59    [1833685]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> На то она и интересная задача

кому как. мне - неинтересная. я решаю такие на клиенте.
31 авг 05, 17:23    [1833824]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
Roman S. Golubin
Member

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

sco

select row_number() over (order by ProductName) RowNumber, * from (
SELECT  count(Products.ProductName) cnt,
 Products.ProductName,
 convert(char(10),UserProducts.DateBought,101) as [date of bought],
 UserProducts.price,'' q

FROM Products
INNER JOIN
 UserProducts
ON
 Products.Id = UserProducts.ProductID
INNER JOIN
 Users
ON
 UserProducts.UserID = Users.ID

where Users.ID=1
group by UserProducts.price,Users.Name,Products.ProductName,UserProducts.DateBought

union all
select '','total',(convert(char(10),GetDate(),101))as CurrentDate,sum(UserProducts.price),''
from UserProducts
where userid =1

union all
select '','','',null,name
from users
where id=1) t


Posted via ActualForum NNTP Server 1.3

31 авг 05, 17:41    [1833928]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
sco
Member

Откуда:
Сообщений: 40
Роман, я честно говоря даже не зню, что это такое: row_number()
в принципе я новичок, но в документации об этом ничего, да и квери аналайзер об этом ничего не знает
31 авг 05, 18:11    [1834065]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
sco
Роман, я честно говоря даже не зню, что это такое: row_number()
в принципе я новичок, но в документации об этом ничего, да и квери аналайзер об этом ничего не знает

Ну да. Еще бы они что-то знали про фичи 2005-го сервера.
31 авг 05, 18:12    [1834075]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
pasha701
Member

Откуда: Дніпропетровськ
Сообщений: 231
если есть возможность лучше в темповую,
что-то типа

SELECT count(Products.ProductName) AS F1,
Products.ProductName As F2,
convert(char(10),UserProducts.DateBought,101) as F3,
UserProducts.price As F4,
'' As F5
Into #Temp

FROM Products
INNER JOIN
UserProducts
ON
Products.Id = UserProducts.ProductID
INNER JOIN
Users
ON
UserProducts.UserID = Users.ID

where Users.ID=1
group by UserProducts.price,Users.Name,Products.ProductName,UserProducts.DateBought


Insert Into #Temp
select '','total',(convert(char(10),GetDate(),101))as CurrentDate,sum(UserProducts.price),''
from UserProducts
where userid =1

Insert Into #Temp
select '','','',null,name
from users
where id=1


alter Table #Temp add Id int identity

Select * From #Temp
31 авг 05, 18:24    [1834142]     Ответить | Цитировать Сообщить модератору
 Re: Интересная задача  [new]
sco
Member

Откуда:
Сообщений: 40
Брат, это все нормально, но ты видишь, что total нумеруется?
У меня похожий вариант был...
31 авг 05, 21:25    [1834581]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить