|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
Малко помощ диря....
|
|
Автор |
Aйeз Ceдaй () |
Публикувано | 06.05.04 22:19 |
|
щото нещо зациклих и съвсем изключих....
Та ....имам две таблици
1. Registry
ID | Name | FName |
-------------------------------
3076 Иван Иванов
PK = ID
2.Таблица Moves
ID | Year |
----------------------
3076 2003
3076 2002
3076 2001
PK = ID, Year ; FK=ID
С queryто ми получавам резултат:
3076, Иван, Иванов, 2003
3076, Иван, Иванов, 2002
3076, Иван, Иванов, 2001
А аз искам резултат от вида:
3076, Иван, Иванов, 2003,2002,2001
| |
Тема
|
Re: Малко помощ диря....
[re: Aйeз Ceдaй]
|
|
Автор |
Пepин (овълчил се) |
Публикувано | 06.05.04 23:42 |
|
Ами най накратко само със SQL може да се напише с много лефт джойнове, ама става грозно. Затова курсор, цикъл ...
| |
|
И как точно ти изглежда query-то?
So long and thanks for all the fish!
| |
|
тц.
ще ми се да е с query, без курсор...тъпото е, че изтъпях тотално...
пробвах и със select case, ама мойто циклене си продължава.......... и пак достигам до резултата, който не ми върши работа...
затова иде реч за помощ....
| |
|
е то е ясно как...
въпросът ми е как да го докарам то резултатът, който искам или другото решение на проблема ми е от properties - Report builder - или на Repeating frame, или на field, но там четох хелпове и до никъде не стигнах.
| |
|
Абе куирито е сайдинска работа и е доста чийтване:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Moves]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Moves]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Registry]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Registry]
GO
CREATE TABLE [dbo].[Moves] (
[ID] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Yr] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
INSERT [Moves]([ID],[Yr]) VALUES('3076','2003')
INSERT [Moves]([ID],[Yr]) VALUES('3076','2002')
INSERT [Moves]([ID],[Yr]) VALUES('3076','2001')
INSERT [Moves]([ID],[Yr]) VALUES('3077','2000')
INSERT [Moves]([ID],[Yr]) VALUES('3077','2002')
CREATE TABLE [dbo].[Registry] (
[ID] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Name] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
INSERT [Registry]([ID],[Name],[FName]) VALUES('3076','John','Doe')
INSERT [Registry]([ID],[Name],[FName]) VALUES('3077','Tim','Smith')
SELECT R.*, M1.Yr, M2.Yr, M3.Yr
FROM Registry AS R
LEFT OUTER JOIN Moves AS M1 ON
R.ID = M1.ID
AND M1.Yr IN (SELECT MAX (Yr) FROM Moves WHERE ID = M1.ID)
LEFT OUTER JOIN Moves AS M2 ON
R.ID = M2.ID
AND M2.Yr IN (SELECT MAX (Yr) FROM Moves WHERE ID = M2.ID AND Yr NOT IN (M1.Yr))
LEFT OUTER JOIN Moves AS M3 ON
R.ID = M3.ID
AND M3.Yr IN (SELECT MAX (Yr) FROM Moves WHERE ID = M3.ID AND Yr NOT IN (M1.Yr, M2.Yr))
Което дава:
ID Name FName Yr Yr Yr
---- ---- ----- ---- ---- ----
3076 John Doe 2003 2002 2001
3077 Tim Smith 2002 2000 NULL
Разбира се това с допускането че Moves има комплексен ключ (ID, Yr).
Представете си колко ме мързи да работя та седнах да напиша това.
| |
|
Ех, Перине, Перине и тез жлъти очи...
не ми върши работа решението ти с дроп и инсерт и криейт тейбъл.. Нали се сещаш, че и двете таблици са доста по-сложни и имат сумати др. фк, които в случая не са съществени... (напр. ФК към таблицата дето записвам кой на коя дата, коя разписка и т.н си е платил даденото задължение. ) За всяка година за всеки ид има по един запис.
| |
Тема
|
Re: Малко помощ диря....
[re: Aйeз Ceдaй]
|
|
Автор |
NDeu (динозавър) |
Публикувано | 07.05.04 10:52 |
|
Той Перина добре го е написал.
Ти гледай селекта. Другото е само скрипт за тестване
Кофтито е, че така става само ако предварително знаеш колко години ще имаш в един ред (max).
Иначе пътя "зациклих" е верния, но без "съвсем изключих"
| |
Тема
|
Re: Малко помощ диря....
[re: Aйeз Ceдaй]
|
|
Автор | Rep (Нерегистриран) |
Публикувано | 07.05.04 11:50 |
|
Кажи каква е базата поне?
И това "2003,2002,2001" в отделни колони ли го искаш, или като низ в една колона? Ако искаш да е в отделни, без динамичен SQL няма да минеш. Ако е като низ в една, може да се направи нещо по въпроса.
| |
|
ако кажеш че ти трябва за MySQL веднага мога да ти дам 2 решения за проблема
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|