I have the following query:
select distinct
b.BinName, Si.Code, si.Name,
b.ConfirmedQtyInStock + b.UnconfirmedQtyInStock as StockQty,
AllocationPriority,
Case
When r1.BinName = b.BinName Then r2.BinName
Else r1.BinName
End as [Location1],
Case
When r1.BinName = b.BinName Then r2.Qty
Else r1.Qty
End as [Qty1],
Case
When r2.BinName In (b.BinName, r1.BinName) Then r3.BinName
Else r2.BinName
End as [Location2]
from
BinItem b
Inner Join
StockItem si On si.ItemID = b.ItemID
left outer join
(select
ROW_NUMBER() Over (Partition By si.Code Order By si.Code, ConfirmedQtyInStock + UnconfirmedQtyInStock asc) as ranking,
si.Code, bi.BinName,
bi.ConfirmedQtyInStock + bi.UnconfirmedQtyInStock as Qty
from
stockitem si
inner join
binitem bi on bi.ItemID = si.itemid
where
bi.ConfirmedQtyInStock + bi.UnconfirmedQtyInStock > 0) r1 On r1.ranking = 1 and r1.Code = si.Code
left outer join
(select
ROW_NUMBER() Over (Partition By si.Code Order By si.Code, ConfirmedQtyInStock+UnconfirmedQtyInStock asc) as ranking,
si.Code, bi.BinName,
bi.ConfirmedQtyInStock + bi.UnconfirmedQtyInStock as Qty
from
stockitem si
inner join
binitem bi on bi.ItemID = si.itemid
where
bi.ConfirmedQtyInStock + bi.UnconfirmedQtyInStock > 0) r2 On r2.ranking = 2 and r2.Code = si.Code
left outer join
(select
ROW_NUMBER() Over (Partition By si.Code Order By si.Code, ConfirmedQtyInStock+UnconfirmedQtyInStock asc) as ranking,
si.Code, bi.BinName,
bi.ConfirmedQtyInStock + bi.UnconfirmedQtyInStock as Qty
from
stockitem si
inner join
binitem bi on bi.ItemID = si.itemid
where
bi.ConfirmedQtyInStock + bi.UnconfirmedQtyInStock > 0) r3 On r3.ranking = 3 and r3.Code = si.Code
left outer join
(select
ROW_NUMBER() Over (Partition By si.Code Order By si.Code, ConfirmedQtyInStock + UnconfirmedQtyInStock asc) as ranking,
si.Code, bi.BinName,
bi.ConfirmedQtyInStock + bi.UnconfirmedQtyInStock as Qty
from
stockitem si
inner join
binitem bi on bi.ItemID = si.itemid
where
bi.ConfirmedQtyInStock + bi.UnconfirmedQtyInStock > 0) r4 On r4.ranking = 4 and r4.Code = si.Code
Where
si.StockItemStatusID = 0
and ConfirmedQtyInStock + UnconfirmedQtyInStock > 0
and si.code = '06403107C'
Order By
Code, b.BinName
What I am trying to do is to ensure that only unique locations are in each of the columns. For example:
C03B1 06403107C 1 1/4in COUNTER NUT CHROME PLATED BRASS 543.00000 1
C04A1 9.00000
C04A1 06403107C 1 1/4in COUNTER NUT CHROME PLATED BRASS 9.00000 4
C03B1 543.00000
However I haven't quite worked out the case logic to move all the values in the r1,r2,r3,r4 subqueries correctly.
Related
CREATE DEFINER=`root`#`localhost` PROCEDURE `SP_DupAuditCriteria_1`()
BEGIN
set #RowNbr=concat(date_format(curdate(),'%Y%m%d'),'0000000');
select temp.* from
(SELECT c.*, concat(c.VendorID,a.VendorID) as MergeH200A, concat(a.VendorID,c.VendorID) as MergeH200B, 'New' as Record_Type, #RowNbr:= #RowNbr + 1 AS ClaimID
FROM tbldupaudit_currentitems AS c
inner join tbldupaudit_archiveitems a
on c.InvoiceID = a.InvoiceID
and c.GrossAmount = a.GrossAmount) as temp
inner join tbldupaudit_archiveitems b
on temp.InvoiceID = b.InvoiceID
and temp.GrossAmount = b.GrossAmount
and temp.VendorID = b.VendorID
and temp.VoucherID <> b.VoucherID
Union all
select temp1.* from
(SELECT f.*, concat(f.VendorID,d.VendorID) as MergeH200A, concat(d.VendorID,f.VendorID) as MergeH200B, 'ARCHIVE' as Record_Type, 1 AS ClaimID
FROM tbldupaudit_archiveitems AS f
inner join tbldupaudit_currentitems d
on f.InvoiceID = d.InvoiceID
and f.GrossAmount = d.GrossAmount) as temp1
inner join tbldupaudit_currentitems e
on temp1.InvoiceID = e.InvoiceID
and temp1.GrossAmount = e.GrossAmount
and temp1.VendorID = e.VendorID
and temp1.VoucherID <> e.VoucherID
order by InvoiceID, Record_Type DESC;
END
trying make unique ClaimID for each pair. I am able to generate sequential number for first half union all but same ClaimID not able to generate in other half Union all.
Please help me in how to create/generate one unique ID for matched items.
Thank you!]1
In the second select ( after the UNION ALL) you are not incrementing a var so if you want both value incrementeedc the try using a var also for the second
select temp.*
from (
SELECT c.*, concat(c.VendorID,a.VendorID) as MergeH200A, concat(a.VendorID,c.VendorID) as MergeH200B, 'New' as Record_Type
, #RowNbr:= #RowNbr + 1 AS ClaimID
FROM tbldupaudit_currentitems AS c
inner join tbldupaudit_archiveitems a on c.InvoiceID = a.InvoiceID
and c.GrossAmount = a.GrossAmount
) as temp
inner join tbldupaudit_archiveitems b on temp.InvoiceID = b.InvoiceID
and temp.GrossAmount = b.GrossAmount
and temp.VendorID = b.VendorID
and temp.VoucherID <> b.VoucherID
Union all
select temp1.*
from (
SELECT f.*, concat(f.VendorID,d.VendorID) as MergeH200A, concat(d.VendorID,f.VendorID) as MergeH200B, 'ARCHIVE' as Record_Type
, #RowNbr:= #RowNbr + 1 AS ClaimID
FROM tbldupaudit_archiveitems AS f
inner join tbldupaudit_currentitems d on f.InvoiceID = d.InvoiceID
and f.GrossAmount = d.GrossAmount
) as temp1
inner join tbldupaudit_currentitems e on temp1.InvoiceID = e.InvoiceID
and temp1.GrossAmount = e.GrossAmount
and temp1.VendorID = e.VendorID
and temp1.VoucherID <> e.VoucherID
order by InvoiceID, Record_Type DESC;
Modelling example - see fiddle :
SELECT CONCAT( 'prefix', LPAD( CASE #prev
WHEN #prev := InvoiceID
THEN #num
ELSE #num := #num + 1
END, 8, '0' ) ) ClaimID, InvoiceID, Amount, FromTable
FROM ( SELECT InvoiceID, Amount, 'CurrentItems' FromTable
FROM CurrentItems
UNION ALL
SELECT InvoiceID, Amount, 'ArchivedItems'
FROM ArchivedItems
WHERE EXISTS ( SELECT NULL
FROM CurrentItems
WHERE CurrentItems.InvoiceID = ArchivedItems.InvoiceID) ) unioned,
( SELECT #prev := 0, #num := 1000 ) variables
ORDER BY InvoiceID, FromTable DESC;
I want to select an increment counter group by medec field please how to do this and i would like the output will be as below
SELECT #n := #n + 1 as n, Nb, medec, prest, Nompatient, ftt, Categorie
FROM (SELECT #n := 0, m.nom as medec, s.id as Nb, ft.id as ftt, sv.libelle , m.nom , pr.libelle as prest, p.nom as Nompatient, ct.libelle as Categorie from services sv, medecins m, sejours s, sejourprestations sjp, prestations pr, patients p, categoriepatients ct, factures ft
WHERE sv.id = s.service_id
AND s.medecin_id = m.id
AND s.patient_id = p.id
AND s.categorie_patient_id = ct.id
AND sjp.sejour_id = s.id
AND sjp.prestation_id = pr.id
AND s.facture_id=ft.id
AND day(s.created_at) = day(CURRENT_DATE)) AS ishmael
GROUP BY n
ORDER BY medec
You should use the SQL window function, for exemple you can have this result with the OVER clause :
SELECT COUNT(Nb) OVER (PARTITION BY medec) as n
i have 4 table in my database like t1,t2,t3,t4 i want count id from condition like when orderId = 1 and i don't know how i can do that . anyone can help me? its basic question but i'm new in sql query.
i use this query and show four column i need just one to set my total cont to another select query.
(SELECT
(SELECT COUNT(id)
FROM c.fa
WHERE foruser = 1
) AS FA ,
(SELECT COUNT(id)
FROM c.ia
WHERE foruser = 1
) AS IA ,
(SELECT COUNT(id)
FROM c.la
WHERE foruser = 1
) AS LA ,
(SELECT COUNT(id)
FROM c.ta
WHERE foruser = 1
) AS TA ,
(SELECT SUM(FA+IA+LA+TA)) AS TOTAL
)
I find my ANSWER :
SELECT SUM(FA+IA+LA+TA) AS TOTAL FROM (
(SELECT COUNT(id) AS FA FROM c.f WHERE foruser = 1 ) AS FAA,
(SELECT COUNT(id) AS IA FROM c.i WHERE foruser = 1) AS IAA ,
(SELECT COUNT(id) AS LA FROM c.l WHERE foruser = 1 ) AS LAA ,
(SELECT COUNT(id) AS TA FROM c.t WHERE foruser = 1 ) AS TAA
)
For SomeOne like me need this.
Your query is basically correct, but to get the total you need another subquery:
SELECT x.*, (FA + IA + LA + TA) as total
FROM (SELECT (SELECT COUNT(id) FROM c.fa WHERE foruser = 1) AS FA ,
(SELECT COUNT(id) FROM c.ia WHERE foruser = 1) AS IA,
(SELECT COUNT(id) FROM c.la WHERE foruser = 1) AS LA,
(SELECT COUNT(id) FROM c.ta WHERE foruser = 1) AS TA
) x;
The problem is that you cannot re-use a column alias in the same SELECT.
The above is only one way to write the query. Often, subqueries are put in a FROM clause, allowing:
SELECT FA.cnt, IA.cnt, LA.cnt, TA.cnt,
(FA.cnt + IA.cnt + LA.cnt + TA.cnt) as total
FROM (SELECT COUNT(id) as cnt FROM c.fa WHERE foruser = 1) FA CROSS JOIN
(SELECT COUNT(id) as cnt FROM c.ia WHERE foruser = 1) IA CROSS JOIN
(SELECT COUNT(id) as cnt FROM c.la WHERE foruser = 1) LA CROSS JOIN
(SELECT COUNT(id) as cnt FROM c.ta WHERE foruser = 1) TA;
SELECT o.* FROM ( SELECT
#rownum := #rownum + 1 RN,
i.* FROM<br>
(
SELECT
#rownum:=0
)
r,<br>
(
SELECT DISTINCT<br>
CG_MGR_USR.MANAGER_NAME,<br>
CG_MGR_USR.PARAM_NAME,<br>
USR_TR_DATA.USER_ID,<br>
CG_MGRS.FIRST_NAME,<br>
CG_MGRS.LAST_NAME,<br>
CC_GENOBJ.OBJNAME,<br>
USR_TR_DATA.RISK_ID,<br>
USR_TR_DATA.VERSION_ID,<br>
T_RISK.RISK_DESCR,<br>
CC_RISKT.RISK_ID CC_RISK,<br>
CC_RISKT.DESCN,<br>
USR_TR_DATA.SYSTEM_ID,<br>
T_STATUS.STATUS,<br>
USR_TR_DATA.COUNTS,<br>
SYSTEMS.SYSTEM_NAME<br>
FROM
TABLE_USR_TR_DATA USR_TR_DATA<br>
LEFT OUTER JOIN TABLE_CC_GENOBJ CC_GENOBJ<br>
ON
CC_GENOBJ.GENOBJTP = 1
AND CC_GENOBJ.SYSTEM_ID IN<br>
(
SELECT
sys_id
FROM
TABLE_CS_SYSTEM
WHERE
cs_sys_id =USR_TR_DATA.system_id
AND is_primary='Y'
)<br>
AND CC_GENOBJ.GENOBJID = USR_TR_DATA.USER_ID,<br>
TABLE_RISK T_RISK<br>
LEFT OUTER JOIN TABLE_CC_RISKT CC_RISKT
ON<br>
CC_RISKT.LANG = 'EN'
AND T_RISK.CC_RISK_ID = CC_RISKT.RISK_ID,<br>
TABLE_CG_MGR_USR CG_MGR_USR,<br>
TABLE_CG_MGRS CG_MGRS,<br>
TABLE_STATUS T_STATUS,<br>
TABLE_CS_SYSTEM CS_SYSTEMS,<br>
TABLE_SYSTEMS SYSTEMS<br>
WHERE
USR_TR_DATA.RISK_ID = T_RISK.RISK_ID<br>
AND USR_TR_DATA.VERSION_ID = T_RISK.VERSION_ID<br>
AND CG_MGR_USR.USER_NAME = USR_TR_DATA.USER_ID<br>
AND CG_MGR_USR.SYSTEM_ID = CS_SYSTEMS.SYS_ID<br>
AND CG_MGRS.MANAGER_NAME = CG_MGR_USR.MANAGER_NAME<br>
AND CG_MGRS.PARAM_NAME =CG_MGR_USR.PARAM_NAME<br>
AND CG_MGRS.SYSTEM_ID = CG_MGR_USR.SYSTEM_ID<br>
AND CS_SYSTEMS.CS_SYS_ID = USR_TR_DATA.SYSTEM_ID<br>
AND CS_SYSTEMS.IS_PRIMARY = 'Y'<br>
AND T_STATUS.SEQ_NO = USR_TR_DATA.STATUS_ID<br>
AND SYSTEMS.SYSTEMS_ID = USR_TR_DATA.SYSTEM_ID<br>
AND CG_MGR_USR.MANAGER_NAME IN( 'SAPUSER' )<br>
AND T_STATUS.STATUS IN( 'IN-PROCESS', 'OPEN' )<br>
AND USR_TR_DATA.COUNTS >= 1<br>
ORDER BY
USER_ID,
SYSTEM_ID,
RISK_ID,
VERSION_ID,
CC_RISK,
STATUS,
COUNTS ASC
)
i ) o <br>WHERE o.RN >= 1 AND o.RN <= 10
It is taking too much time for to fetch only 10 records.
I have a query like this -
SELECT e.id,
( (SELECT ABS((SELECT YEAR(NOW()) - YEAR(ud.dob)
FROM user_detail ud
WHERE ud.userid = 49) - AVG(avgr.abc
+ (SELECT YEAR(NOW()) - YEAR(ud.dob)
FROM user_detail ud
WHERE ud.userid = 49))) AS VALUE
FROM (SELECT YEAR(NOW()) - YEAR(ud.dob) AS abc
FROM user_detail ud
WHERE ud.userid = (SELECT ei.interested_user
FROM event_interest ei
WHERE ei.eventid = e.id
AND ei.approvalstatus = 'Approve')
UNION
SELECT YEAR(NOW()) - YEAR(ud.dob) AS abc
FROM user_detail ud
WHERE ud.userid = (SELECT ei.invited_user
FROM event_invite ei
WHERE ei.eventid = e.id
AND ei.acceptance = 'Accept')) AS avgr)
+ (SELECT IFNULL(( 3959 * ACOS(COS(RADIANS(22.6979425)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(75.8597305)) + SIN(RADIANS(22.6979425)) * SIN(RADIANS(latitude))) ), 0)
FROM address a
WHERE a.latitude != ''
AND a.longitude != ''
AND e.event_address = a.id) ) AS dest
FROM event e
WHERE ( ( e.maximumattendeesallow > ( (SELECT COUNT(*) AS cnt
FROM event_interest
WHERE eventid = e.id
AND approvalstatus = 'Approve')
+ (SELECT COUNT(*) AS cnt
FROM event_invite
WHERE eventid = e.id
AND acceptance = 'Accept') ) )
OR ( e.maximumattendeesallow = 0 ) )
AND EXISTS (SELECT id
FROM address a
WHERE latitude != ''
AND longitude != ''
AND e.event_address = id
AND IFNULL(( 3959 * ACOS(COS(RADIANS(22.6979425)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(75.8597305)) + SIN(RADIANS(22.6979425)) * SIN(RADIANS(latitude))) ), 0) < 100)
AND NOT EXISTS (SELECT eventid
FROM event_interest
WHERE e.id = eventid
AND approvalstatus != 'InterestExpressed'
AND interested_user = 49)
AND NOT EXISTS (SELECT eventid
FROM event_invite
WHERE eventid = e.id
AND invited_user = 49);
This query giving me error -
Error Code: 1054
Unknown column 'e.id' in 'where clause'
Why its not allowing subquery to use e.id in order by clause.
In the query, you have used E.ID. change it to "e.id" and execute. This time you won't get that error.
In fourth select clause, that is after AND NOT EXISTS(Select.., . In where clause you mentioned as WHERE e.id =eventid , instead of this , write as WHERE eventid = e.id . This will resolve your error.