|
Hi! I have 2 table A & B link by ID as below. It is Oracle database. I use Toad to extract data. I just learn SQL and don't know T-SQL. I tried to write case statement but it doesn't work the way I want. These following case statement only display 1 email for a ID. select distinct ID, case when EMAIL_CODE = 'work' then case when EMAIL_CODE = 'HOME' then from TBL A where EMAIL_CODE in ( 'work' , 'home' ) group by ID,EMAIL_CODE, EMAIL_ADDRESS ) mail where B.ID = mail.ID Tbl A Tbl B I want to display them in 3 column as below: Please help! Thank you in advance! Hellen
(comments are locked)
|
|
If 3 columns are static (meaning that no account has more than 2 email addresses then you can use the static PIVOT but in order to use it you first need to come up with the common data for all accounts. Row numbering partitioned by the ID would be a good choice. Here is the sample: This will work if you have SQL Server 2005 or better. <!-- Begin Edit For restating the query in Oracle dialect, the version is very important. As @Pavel Pawlowski mentioned in his comment, CASE is available in Oracle 9i or better, so it can be used in place of a more traditional DECODE. Below are the scripts for both newer and older versions of Oracle. I restated both as left join because I believe that it makes sense in a scenario when some records in the parent table named TBLB do not have the match in the child table TBLA, but the IDs from TBLB still need to be included in the results. Another important detail to point out that the names of the database objects should not contain spaces, the names are not case sensitive, but the column values are always case sensitive. This means that the words 'work' and 'home' should be either spelled in correct case or else the LOWER function should be applied to the column. Here are the scripts (one for each version): So the only problem with the original script in question was that the GROUP BY was included more columns than it deserved and it was also in the wrong place. End Edit --> Hope this helps, Oleg +1 Also if there could be more emails per account but you know there is a maximum of the emails then you can go again the static approach and specify the maximum number of email columns. The ones not used will have null.
Jul 26 '11 at 11:45 PM
Pavel Pawlowski
Thank you Oleg! I don't know T-SQL. Is there away to query with regular SQL? Thank you for help!
Jul 27 '11 at 05:48 PM
Hellen
T-SQL is the SQL "dialect" used by SQL Server. In this context, it is regular SQL. Are you looking specifically for a solution that will work on a non-SQL Server system?
Jul 27 '11 at 06:14 PM
KenJ
@Hellen If you work with Oracle database then CASE should not work. The equivalent of CASE in SQL Server is the function named DECODE in Oracle. Please let me know whether you need a SQL Server or Oracle dialect and I will try to restate your query.
Jul 27 '11 at 07:46 PM
Oleg
@Oleg, the CASE depends on Oracle version. I think that from Oracle 9i and up also the CASE is working.
Jul 27 '11 at 11:39 PM
Pavel Pawlowski
(comments are locked)
|


is there ever a situation where you would have three emails for a given ID in Tbl A and how would you do with it?
1111 K@Holiday.com