Qlikview left join two table and generate the data to qvd - qlikview

I'm relatively new to qlikview and not sure if the left join is the same as normal sql: SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
Would like to have your assistance to left join the tables using TRIP_ID, and classified the period using the ARRIVE_DT then generate the data in qvd
LOAD "TRIP_ID",
"PM_M",
"ARRIVE_DT",
"CHASSIS_MAX_LADEN_WEIGHT_Q";
SQL SELECT *
FROM Table1."V_GATE_PM_TRIP";
LOAD "TRIP_ID",
"CREATE_DT",
"MODIFIED_DT";
SQL SELECT *
FROM Table2."V_GATE_PM_TRIP_CNTR";
Thank you.

Just add LEFT JOIN before the second load.If you loading both tables from the same SQL source then just use the SQL syntax the same as you wrote in your question

This is what i managed to do after looking at online and it generated the qvd with the data sorted by the date.
TEMP_TABLE1:
LOAD "TRIP_ID",
"PM_M",
"ARRIVE_DT";
SQL SELECT *
FROM EODWADMIN."V_GATE_PM_TRIP";
LEFT JOIN
LOAD "TRIP_ID",
"CREATE_DT",
"MODIFIED_DT";
SQL SELECT *
FROM EODWADMIN."V_GATE_PM_TRIP_CNTR";
TABLE2:
LOAD*, 1 AS FLAG
RESIDENT TEMP_TABLE1 ORDER BY ARRIVE_DT;
STORE TABLE2 INTO PM.QVD (QVD);

In QlikView the LEFT JOIN work a little different that in SQL.
In SQL you specify the fields from both table in the sentence of the left join:
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2 on t1.FieldA=t2.FieldB
In QlikView the JOIN works with the field name, you don't need to specify the name. In the case the fields have different name, you have to rename one of them (or both) to get the same name:
TABLE1:
LOAD
TRIP_ID1 as JOIN_KEY,
PM_M,
ARRIVE_DT
FROM Tabel1
;
LEFT JOIN (TABLE1)
LOAD
TRIP_ID2 as JOIN_KEY,
CREATED_DT,
MODIFIED_DT
FROM Table2
;

Related

SQL - join multiplying data

I need to produce a synthetic table from 2 tables but one of them is tricky.
First table (sample):
Second table (sample also) :
I want to use it to find the 'store' of each 'pers'
What i want at the end :
(and i want to keep the 'zero' if sum_of_duration is null)
My first code :
SELECT
QRT,
STORE,
sum(DURATION) as SUM_of_DURATION
FROM T1
LEFT JOIN T2
on T1.PERS=T2.PERS
group by QRT, STORE
But my 'Sum_of_durations' are out of the roof because of multiple joins induced by table 2 i guess.
Any help ?
Thanks
Remove duplicates before joining:
SELECT T1.QRT, T2.STORE,
SUM(T1.DURATION) as SUM_of_DURATION
FROM T1 LEFT JOIN
(SELECT DISTINCT QRT, PERS
FROM t2
) t2
ON T1.PERS = T2.PERS
GROUP BY T1.QRT, T2.STORE;

SQL-Duplicate column names

I am using SQL developer and I am trying an outer join on two tables. The error it is showing is "Duplicate column names". I have used the table nameswhile comparison but still it is giving error. Code is as following:
CREATE VIEW OECD_VIEW AS
SELECT * FROM DM_OECD_GDP FULL OUTER JOIN DM_OECD_DOCTORS
ON DM_OECD_GDP.DATA_YEAR = DM_OECD_DOCTORS.DATA_YEAR;
I have heard that this error can be resolved by aliasing but I don't know how to alias while comparing. Can this be done?
Thanks
You have to explicitly name returned fields from both tables and alias fields having the same name, like:
CREATE VIEW OECD_VIEW AS
SELECT DM_OECD_GDP.DATA_YEAR AS GDP_DATA_YEAR,
DM_OECD_DOCTORS.DATA_YEAR AS DOC_DATA_YEAR,
... rest of the fields here
FROM DM_OECD_GDP
FULL OUTER JOIN DM_OECD_DOCTORS
ON DM_OECD_GDP.DATA_YEAR = DM_OECD_DOCTORS.DATA_YEAR;
This is the generalised query to create views with alias and full outer join :
create view v6 as select t1.c1, t2.c2 from t1 FULL OUTER JOIN t2 on t1.id = t2.id;
If both tables have same column names, may be the foreign keys, dont use * , Manually select the column names
table_one - ID,Name
table_two - ID,SecondName
select table_one.ID,table_one.Name,table_two.ID as ID2,
table_two.SecondName full outer join on table_one.ID=table_two.ID

MS Access Inner Join On 3 Tables with the same field_name

I'm doing an assignment for class, and I'm at my whits end. Basically, I need to write a query that uses INNER JOIN's to combine all the data in 4 tables, while avoiding having titles columns with identical names (Ie Table1.Master_Number and Table2.Master_Number). The literal instructions are as follows:
Step 1: Create a view of all the columns (only list the columns once if the columns are duplicated in the tables) in all the tables of the Lecture 5 database. Save this query as Lecture_5_View and us this query to build the following 3 queries. In the “FROM” clause, you MUST use an “INNER JOIN” in this query. Remember ACCESS does not support the “CREATE VIEW” command so you must create a select query. `
Here is a screenshot of the database, that shows all the headings and column headings.
Based on other posts like this, I thought that it would be pretty simple. I have this so far, but it does not want to run
(ie Syntax error(missing operator) in query expression 'Table1.Master_Number = Table2.Master_Number INNER JOIN Table4 ON Table1.Master_Number = Table4.Master_Number)
SELECT *
FROM Table1
INNER JOIN Table2 ON Table1.Master_Number = Table2.Master_Number
INNER JOIN Table4 ON Table1.Master_Number = Table4.Master_Number
Where am I going wrong so far and how to I accomplish this query?
Much thanks,
Josh
With Access you need to use parentheses when doing more than one join:
SELECT *
FROM (Table1
INNER JOIN Table2
ON Table1.Master_Number = Table2.Master_Number)
INNER JOIN Table4
ON Table1.Master_Number = Table4.Master_Number;
This is essentiall spliting down you query so you have at most one join per section, i.e. Your First query is:
SELECT *
FROM Table1
INNER JOIN Table2
ON Table1.Master_Number = Table2.Master_Number;
Then you have:
SELECT *
FROM YourFirstQuery
INNER JOIN Table4
ON Table1.Master_Number = Table4.Master_Number;
This differs slightly from subqueries as you are still able to reference all fields from Table1 and Table2.
EDIT
To avoid duplicating columns you will need to explicitly list the columns you want (although you should be doing this anyway):
SELECT Table1.Master_Number,
Table1.Asset_Tag,
Table1.Serial_Number,
Table2.Last_Name,
Table2.First_Name,
Table4.Office_Number,
Table4.Location,
Table4.Department
FROM (Table1
INNER JOIN Table2
ON Table1.Master_Number = Table2.Master_Number)
INNER JOIN Table4
ON Table1.Master_Number = Table4.Master_Number;
Try this:
SELECT * FROM ((Table1
INNER JOIN Table2
ON Table1.Master_Number = Table2.Master_Number)
INNER JOIN Table4
ON Table1.Master_Number = Table4.Master_Number)

select everything from one table, and array from another

I have one table that contains lots of data and I want to select everything from this one.
Another table contains different statuscodes ( fields ID and text ), and I want to join this table into the first one so i get something like
All data from first table id1,text2,id2,text2 or id1,id2,text1,text2 from the second table.
USe LEFT OUTER JOIN
Select T1.*,T2.ID,T2.Text
from firstTable t1
LEFT OUTER JOIN SecondTable T2
on T1.<col>=T2.<col>
You can use join like this whether it may be left/right/inner join
SELECT t1.*,t2.id,t2.text
FROM table1 t1
LEFT JOIN table2 t2
ON t2.column_name=t1.column_name

SQL JOIN two tables with two equally named columns

I have two tables that I'd like to join
Right now I just do :
SELECT * FROM (default_insurance)
JOIN default_profiles ON uid = default_profiles.id
WHERE `uid` = '1
problem is that both default_insurance and default_profiles contains a column named company, and I only want the one from default_insurance, but is there a way to make a join that will automatically prefer columns from one of the tables WITHOUT having to SELECT (all columns that I want)
You can always specify what exactly do you need (+use table aliases):
SELECT t1.*, t2.company AS default_insurance_company
FROM default_profiles t1 LEFT JOIN default_insurance t2
ON t1.uid = t2.id
WHERE t1.uid = 1
(MySQL example)
Above will return all columns from t1 and additionally column company from t2, but on your result it will be named default_insurance_company.
Automatically no. You need to use like this:
SELECT [all columns that you want], di.company
FROM default_insurance di
JOIN default_profiles dp ON di.uid = dp.id
WHERE di.uid = '1