Showing posts with label selection. Show all posts
Showing posts with label selection. Show all posts

Thursday, March 8, 2012

Complicated conditional selection.

Befor question let me give you the tables, so simple:

tblProduct tblProductLang

ID ProductName Cost ID ProductName Lang
- -

1 Pencil 1 1 Bleistift gr-GR

2 Paper 1 2 Papier gr-GR

3 Button 2 3 Taste gr-GR

4 Mouse 15 4 Maus gr-GR

5 Monitor 45 4 Souris fr-FR

Ok. We have two table,
tblProduct: Keeps the product name and cost
tblProductLang: Keeps the product name in different language and short name of the language.

We are about the make a language file to our website. Default language is english. So no problem with the product name, user can easily understand. If yuser selects german , english names of the product will be nothing for him/her. We make a language table for products so when user changes language, he/she will get product name of the preffered language, if there is no equivalent name of that product, result will be default name. Let me give you a sample output:

If user wants gr-GR language , result will be: If user wants fr-FR language , result will be:

ID ProductName Cost ID ProductName Cost

- -

1 Bleistift 1 1 Pencil 1
2 Papier 1 2 Paper 1

3 Taste 2 3 Button 2

4 Maus 15 4 Souris 15

5 Monitor 45 5 Monitor 45


As you can see ID 1,2,3,4 came from tblProductLang as German, but ID 5 has no equivalent so it came from tblProduct as English.(Same thing for the french.) So question is how can i do that?

Here it is,

Code Snippet

Create Table #tblproduct(

[ID] int ,

[ProductName] Varchar(100) ,

[Cost] int

);

Insert Into #tblproductValues('1','Pencil','1');

Insert Into #tblproductValues('2','Paper','1');

Insert Into #tblproductValues('3','Button','2');

Insert Into #tblproductValues('4','Mouse','15');

Insert Into #tblproductValues('5','Monitor','45');

Create Table #tblproductlang (

[ID] int ,

[ProductName] Varchar(100) ,

[Lang] Varchar(100)

);

Insert Into #tblproductlang Values('1','Bleistift','gr-GR');

Insert Into #tblproductlang Values('2','Papier','gr-GR');

Insert Into #tblproductlang Values('3','Taste','gr-GR');

Insert Into #tblproductlang Values('4','Maus','gr-GR');

Insert Into #tblproductlang Values('4','Souris','fr-FR');

Code Snippet

Select P.ID, Isnull(L.ProductName, P.ProductName), P.Cost from #tblproduct P

left outer join #tblproductlang L

on P.[ID] = L.[ID] and [Lang] = 'fr-FR'

Select P.ID, Isnull(L.ProductName, P.ProductName), P.Cost from #tblproduct P

left outer join #tblproductlang L

on P.[ID] = L.[ID] and [Lang] = 'gr-GR'

|||YEEEES YEEEEEES. I love you man. I love you. I m crying right now. This is it. I ll never forget your name. I love youuuuu

Sunday, February 19, 2012

Complete beginner needs help with record selection

As a complete beginner to Crystal Reports I hope I am not asking stupid questions of what looks like a very technical and knowledgeable forum...if I am please feel free to direct me elsewhere!

I am trying to select records using several Tables but filtered from a 'Transactions Table' but only want the last dated record (ie the last dated record is equal to [input date range]. In Access I would use a query asking for 'LastOf...[field name] - but I don't know how to select the LastOf in Crystal Reports. I have stumbled around the Help for ages...can anybody please advise me on what I am sure is a simple question!
Many ThanksOne way would be to group by the table.column you're interested in and add the 'lastof' clause into the group selection formula:

{table.column} = Maximum ({table.column})|||If you use Access query for that, then design report based on that query and supply that value as parameter