How do I change this sql statement to only select the first from each ID? - sql

I have the below code to select from a database, however, I only want the first record for each unique ID. Is there a way to change the SQL to achieve this?
SELECT
[CARL_Property].ID
,[PrDoorNum]
,[PrAddress1]
,[PrAddress2]
,[PrAddress3]
,[PrAddress4]
,[PrPostcode]
,[PrRent]
,[PrAgreedRent]
,[PrCommence]
,[PrEnd]
,[PrAvailable]
,[PrGrossIncome]
,[PrCouncilTax]
,[PrInventoryFee]
,[PrLetFee]
,[PrReletFee]
,[PrDateWithdrawn]
,[Rent Review]
,CARL_Owners.OwForenames
,CARL_Owners.OwSurname
,CARL_Property_List.[ID]
,CARL_Property_List.[PrId]
,CARL_Property_List.[PLBedrooms]
,CARL_Property_List.[PlRooms]
,CARL_Property_List.[PlBathrooms]
,CARL_Property_List.[PlReceptions]
,CARL_Property_List.[PlDeposit]
,CARL_Tenant_Contacts.[Tenant Name]
,CARL_New_Tenants.[TnLeaseperiod]
,CARL_Property_List.[PlAdvertising]
,[CARL_Property_Memos].[PrNotes]
,[CARL_Safety].[PrGasInsp]
from dbo.CARL_Property Join dbo.[CARL_Property_Memos] on CARL_Property.ID=CARL_Property_Memos.PrID Join dbo.CARL_Owners on CARL_Owners.ID=CARL_Property.OwID Join dbo.CARL_PROPERTY_LIST ON dbo.CARL_PROPERTY.ID=dbo.CARL_PROPERTY_LIST.PrId Join dbo.[CARL_New_Tenants] ON CARL_New_Tenants.PrId=CARL_Property.ID JOIN CARL_Tenant_Contacts ON CARL_New_Tenants.ID = CARL_Tenant_Contacts.TnID Join [dbo].[CARL_Safety] On dbo.CARL_Property.ID=dbo.CARL_Safety.PrID
The result is as seen below.

Something along these lines I think is what you are looking for. Also, notice that I used aliases in your main query. It makes this a lot simpler to work with and reduces the amount of typing by a LOT.
with SortedResults as
(
SELECT
cp.ID
, ROW_NUMBER() over(partition by cp.ID order by pl.ID) as RowNum --order by whatever column defines "first"
, [PrDoorNum]
, [PrAddress1]
, [PrAddress2]
, [PrAddress3]
, [PrAddress4]
, [PrPostcode]
, [PrRent]
, [PrAgreedRent]
, [PrCommence]
, [PrEnd]
, [PrAvailable]
, [PrGrossIncome]
, [PrCouncilTax]
, [PrInventoryFee]
, [PrLetFee]
, [PrReletFee]
, [PrDateWithdrawn]
, [Rent Review]
, o.OwForenames
, o.OwSurname
, pl.[ID] as PL_ID
, pl.[PrId]
, pl.[PLBedrooms]
, pl.[PlRooms]
, pl.[PlBathrooms]
, pl.[PlReceptions]
, pl.[PlDeposit]
, tc.[Tenant Name]
, nt.[TnLeaseperiod]
, pl.[PlAdvertising]
, pm.[PrNotes]
, cs.[PrGasInsp]
from dbo.CARL_Property p
Join dbo.[CARL_Property_Memos] pm on p.ID = pm.PrID
Join dbo.CARL_Owners o on o.ID = p.OwID
Join dbo.CARL_PROPERTY_LIST pl ON p.ID = pl.PrId
Join dbo.[CARL_New_Tenants] nt ON nt.PrId = p.ID
JOIN CARL_Tenant_Contacts tc ON nt.ID = tc.TnID
Join [dbo].[CARL_Safety] cs On p.ID = cs.PrID
)
select *
from SortedResults
where RowNum = 1
order by ID

Related

Which query is faster to execute

Following are two options to query CTE and NFSE data. Pls advise !
A similar approach may have to be used in many places.
I would like you to verify them and suggest, if there are better options.
Option 1: Query CTE with all necessary joins UNION with query on NFSe with all necessary joins
SELECT DISTINCT 'CTE' as docTypeID
, cte.isqn_mstr_cd as ctePk
, cte.ct_e_cd
, cter.stat_desc
, awb.CREATE_DT
, awb.AWB_NBR
, awb.SHPR_NM
, awbs.DEST_LOC_CD
, nfe.NT_FSCL_CD
, nfe.FSCL_DOC_NBR
FROM cte_identity_master cte
INNER JOIN cte_response_detail cter ON (cte.isqn_mstr_cd = cter.isqn_mstr_cd)
LEFT JOIN match_ref_awb mawb ON (cte.isqn_ref_cd = mawb.isqn_mstr_cd)
LEFT JOIN awb_cust_master awb ON (mawb.awb_nbr = awb.awb_nbr)
LEFT JOIN awb_shipment_detail awbs ON (awb.awb_nbr = awbs.awb_nbr)
LEFT JOIN match_ref_nfe mnfe ON (cte.isqn_ref_cd = mnfe.isqn_mstr_cd)
LEFT JOIN nfe_identity_master nfe ON (mnfe.nt_fscl_cd = nfe.nt_fscl_cd)
UNION
SELECT DISTINCT 'NFSE' as docTypeID
, nfse.isqn_mstr_cd as nfsePk
, nfse.rp_s_id
, nfser.stat_desc
, awb.CREATE_DT
, awb.AWB_NBR
, awb.SHPR_NM
, awbs.DEST_LOC_CD
, nfe.NT_FSCL_CD
, nfe.FSCL_DOC_NBR
FROM nfse_request_detail nfse
INNER JOIN nfse_response_detail nfser ON (nfse.isqn_mstr_cd = nfser.isqn_mstr_cd)
LEFT JOIN match_ref_awb mawb ON (nfse.isqn_ref_cd = mawb.isqn_mstr_cd)
LEFT JOIN awb_cust_master awb ON (mawb.awb_nbr = awb.awb_nbr)
LEFT JOIN awb_shipment_detail awbs ON (awb.awb_nbr = awbs.awb_nbr)
LEFT JOIN match_ref_nfe mnfe ON (nfse.isqn_ref_cd = mnfe.isqn_mstr_cd)
LEFT JOIN nfe_identity_master nfe ON (mnfe.nt_fscl_cd = nfe.nt_fscl_cd)
;
Option 2: Use Union of CTe and NFSe first and then apply joins with other tables
SELECT ctnf.*
, awb.CREATE_DT
, awb.AWB_NBR
, awb.SHPR_NM
, awbs.DEST_LOC_CD
, nfe.NT_FSCL_CD
, nfe.FSCL_DOC_NBR
FROM (
SELECT DISTINCT 'CTE' as docTypeID
, cte.isqn_mstr_cd as docPk
, cte.ct_e_cd as docNbr
, cter.stat_desc as docStat
, cte.isqn_ref_cd as matchRef
FROM cte_identity_master cte
INNER JOIN cte_response_detail cter ON (cte.isqn_mstr_cd = cter.isqn_mstr_cd)
UNION
SELECT DISTINCT 'NFSE' as docTypeID
, nfse.isqn_mstr_cd as nfsePk
, nfse.rp_s_id
, nfser.stat_desc
, nfse.isqn_ref_cd
FROM nfse_request_detail nfse
INNER JOIN nfse_response_detail nfser ON (nfse.isqn_mstr_cd = nfser.isqn_mstr_cd)
) ctnf
LEFT JOIN match_ref_awb mawb ON (ctnf.matchRef = mawb.isqn_mstr_cd)
LEFT JOIN awb_cust_master awb ON (mawb.awb_nbr = awb.awb_nbr)
LEFT JOIN awb_shipment_detail awbs ON (awb.awb_nbr = awbs.awb_nbr)
LEFT JOIN match_ref_nfe mnfe ON (ctnf.matchRef = mnfe.isqn_mstr_cd)
LEFT JOIN nfe_identity_master nfe ON (mnfe.nt_fscl_cd = nfe.nt_fscl_cd)
;
Both approaches of the above will have following Where Clause:
WHERE lower(cte.sttn_cd) = lower(:stationId)
and (:documentType is null or lower(:documentType) = 'cte')
and (:shipperName is null or lower(awb.shipperNm) like lower(concat(concat('%',:shipperName),'%')))
and (:awbCreated is null or to_char(awb.createDt, 'MM-DD-YYYY') = :awbCreated)
and (:awbNumber is null or m2.awbNbr like concat(concat('%',:awbNumber),'%'))
and (:serviceType = 0 or awbs.baseServiceCd = :serviceType)
and (:commitmentDate is null or awbs.commitmentDate = :commitmentDate)
and (:ursa is null or lower(awbs.ursaCd) like lower(concat(concat('%',:ursa),'%')))
and (:destLocationId is null or lower(awbs.destLocCd) like lower(concat(concat('%',:destLocationId),'%')))
and (:nfeNumber is null or nfe.fiscalDocumentNumber like concat(concat('%',:nfeNumber),'%'))
PLEASE SUGGEST - Output of these two approaches to get data which one will be better to fix at Java End to retrieve the data.
Any help will be greatly appreciated. Also suggest if there is any other better query apart from these two!

GROUP BY syntax Error

SELECT
SinifNo, OgrNo, Kalan, Ad, Soyad, MAX(VadeGunu)
FROM
(SELECT
o.SinifNo, a.OgrNo, o.Ad, o.Soyad, o.Sezon, o.SubeKod,
o.TCNo, o.AnneAd, o.AnneMobil, o.BabaAd, o.BabaMobil,
a.Tarih, a.Tutar, a.Odenen, a.Kalan,
DATEDIFF(DAY, a.Tarih, (getdate() + 1)) AS VadeGunu
FROM
TblTahPlan a
JOIN
TblOgrenci o ON a.OgrNo = o.OgrNo)
GROUP BY
SinifNo, OgrNo, Kalan, Ad, Soyad
It is my SQL query. But I'm getting this error:
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'group'.
What can I do to solve this?
If you format your query, it becomes more easy to read and more easy to spot the mistake:
select SinifNo
, OgrNo
, Kalan
, Ad
, Soyad
, MAX(VadeGunu)
FROM (
SELECT o.SinifNo,a.OgrNo,o.Ad,o.Soyad,o.Sezon,o.SubeKod,o.TCNo,o.AnneAd,o.AnneMobil,o.BabaAd,o.BabaMobil,a.Tarih,a.Tutar,a.Odenen,a.Kalan
, DATEDIFF(DAY,a.Tarih,(getdate()+1)) as VadeGunu
FROM TblTahPlan AS a
JOIN TblOgrenci AS o
ON a.OgrNo=o.OgrNo
) AS T1
GROUP by SinifNo,OgrNo, Kalan,Ad,Soyad
You were missing an alias for your subquery, and a space before the group by. Why are you selecting all those attributes in your subquery? Why do you use a subquery at all? You could just as easily do:
SELECT o.SinifNo
, a.OgrNo
, a.Kalan
, o.Ad
, o.Soyad
, MAX(DATEDIFF(DAY,a.Tarih,(getdate()+1))) as VadeGunu
FROM TblTahPlan a
JOIN TblOgrenci o
ON a.OgrNo=o.OgrNo
GROUP by o.SinifNo
, a.OgrNo
, a.Kalan
, o.Ad
, o.Soyad
Change to the code
join TblOgrenci o on a.OgrNo=o.OgrNo) as tbl group by SinifNo,OgrNo,
Dont write code for yourself. Have proper alignment and formatting in place.
Change your query as below. You have to give alias to your inner query.
select
SinifNo,
OgrNo,
Kalan,
Ad,
Soyad,
max(VadeGunu)
from (select
o.SinifNo,
a.OgrNo,
o.Ad,
o.Soyad,
o.Sezon,
o.SubeKod,
o.TCNo,
o.AnneAd,
o.AnneMobil,
o.BabaAd,
o.BabaMobil,
a.Tarih,
a.Tutar,
a.Odenen,
a.Kalan,
DATEDIFF(DAY,a.Tarih,(getdate()+1)) as VadeGunu
from TblTahPlan a
join TblOgrenci o on a.OgrNo=o.OgrNo) as tblA
group by SinifNo, OgrNo, Kalan, Ad, Soyad
you can use this way
SELECT SinifNo,OgrNo, Kalan,Ad,Soyad, max(VadeGunu)
FROM
(SELECT o.SinifNo As SinifNo
, a.OgrNo As OgrNo
, o.Ad As Ad
, o.Soyad As Soyad
, o.Sezon As Sezon
, o.SubeKod As SubeKod
, o.TCNo As TCNo
, o.AnneAd As AnneAd
, o.AnneMobil As AnneMobil
, o.BabaAd As BabaAd
, o.BabaMobil As BabaMobil
, a.Tarih As Tarih
, a.Tutar As Tutar
, a.Odenen As Odenen
, a.Kalan As Kalan
, DATEDIFF(DAY,a.Tarih,(getdate()+1)) AS VadeGunu
FROM TblTahPlan a
Inner Join
TblOgrenci o
On a.OgrNo = o.OgrNo ) c
GROUP BY c.SinifNo
, c.OgrNo
, c.Kalan
, c.Ad
, c.Soyad

How to rewrite query

I need to update based on a select. The following errors with: the column '' was specified multiple times for Q
UPDATE Evolution1.DimAdministrator
SET Evolution1.DimAdministrator.ClaimSystemCodeId = 17
FROM Evolution1.DimAdministrator da INNER JOIN (
Select
ExtractId,
base.AdministratorId,
base.CardprocessorAdministratorId,
AdministratorName,
EffectiveDate,
CancelDate ,
State,
StageError ,
AdministratorKey,
CustomerKey ,
Name ,
EffectiveDateKey ,
CancelDateKey,
StateProvinceKey ,
Alias ,
NavId ,
warehouse.AdministratorId ,
warehouse.CardprocessorAdministratorId,
warehouse.ClaimSystemCodeId,
Inserted ,
Updated
FROM OneStage.OnePay.Administrator base
INNER JOIN OneWarehouse.Evolution1.DimAdministrator warehouse ON base.AdministratorId = warehouse.AdministratorId
WHERE base.ClaimSystemCodeId <> warehouse.ClaimSystemCodeId
AND base.ClaimSystemCodeId = 1
) AS Q
Help please. Thanks.
You have multiple columns with duplicate names.
Put an alias on them like this:
UPDATE Evolution1.DimAdministrator
SET Evolution1.DimAdministrator.ClaimSystemCodeId = 17
FROM Evolution1.DimAdministrator da INNER JOIN (
Select
ExtractId,
base.AdministratorId AS base_AdminID,
base.CardprocessorAdministratorId AS base_CardID,
AdministratorName,
EffectiveDate,
CancelDate ,
State,
StageError ,
AdministratorKey,
CustomerKey ,
Name ,
EffectiveDateKey ,
CancelDateKey,
StateProvinceKey ,
Alias ,
NavId ,
warehouse.AdministratorId wh_AdminID,
warehouse.CardprocessorAdministratorId AS WH_CardID,
warehouse.ClaimSystemCodeId,
Inserted ,
Updated
FROM OneStage.OnePay.Administrator base
INNER JOIN OneWarehouse.Evolution1.DimAdministrator warehouse ON base.AdministratorId = warehouse.AdministratorId
WHERE base.ClaimSystemCodeId <> warehouse.ClaimSystemCodeId
AND base.ClaimSystemCodeId = 1
) AS Q
Are you sure you don't need to JOIN Q ON something?

SQL Query to get only 1 instance of a record where one to many relationship exists

Ive got an SQL Query trying to get 1 record back when a 1 to many relationship exists.
SELECT dbo.BlogEntries.ID AS blog_entries_id, dbo.BlogEntries.BlogTitle, dbo.BlogEntries.BlogEntry, dbo.BlogEntries.BlogName,
dbo.BlogEntries.DateCreated AS blog_entries_datecreated, dbo.BlogEntries.inActive AS blog_entries_in_active,
dbo.BlogEntries.HtmlMetaDescription AS blog_entries_html_meta_description, dbo.BlogEntries.HtmlMetaKeywords AS blog_entries_html_meta_keywords,
dbo.BlogEntries.image1, dbo.BlogEntries.image2, dbo.BlogEntries.image3, dbo.BlogEntries.formSelector, dbo.BlogEntries.image1Alignment,
dbo.BlogEntries.image2Alignment, dbo.BlogEntries.image3Alignment, dbo.BlogEntries.blogEntryDisplayName, dbo.BlogEntries.published AS blog_entries_published,
dbo.BlogEntries.entered_by, dbo.BlogEntries.dateApproved, dbo.BlogEntries.approved_by, dbo.blog_entry_tracking.id AS blog_entry_tracking_id,
dbo.blog_entry_tracking.blog, dbo.blog_entry_tracking.blog_entry, dbo.BlogCategories.ID, dbo.BlogCategories.BlogCategoryName,
dbo.BlogCategories.BlogCategoryComments, dbo.BlogCategories.DateCreated, dbo.BlogCategories.BlogCategoryTitle, dbo.BlogCategories.BlogCategoryTemplate,
dbo.BlogCategories.inActive, dbo.BlogCategories.HtmlMetaDescription, dbo.BlogCategories.HtmlMetaKeywords, dbo.BlogCategories.entry_sort_order,
dbo.BlogCategories.per_page, dbo.BlogCategories.shorten_page_content, dbo.BlogCategories.BlogCategoryDisplayName, dbo.BlogCategories.published,
dbo.BlogCategories.blogParent
FROM dbo.BlogEntries LEFT OUTER JOIN
dbo.blog_entry_tracking ON dbo.BlogEntries.ID = dbo.blog_entry_tracking.blog_entry LEFT OUTER JOIN
dbo.BlogCategories ON dbo.blog_entry_tracking.blog = dbo.BlogCategories.ID
i have some records assigned to 2 different blogcategories, and when i query everything it returns duplicate records.
How do i only return 1 instance of a blog?
Try this one -
SELECT blog_entries_id = be.Id
, be.BlogTitle
, be.BlogEntry
, be.BlogName
, blog_entries_datecreated = be.DateCreated
, blog_entries_in_active = be.inActive
, blog_entries_html_meta_description = be.HtmlMetaDescription
, blog_entries_html_meta_keywords = be.HtmlMetaKeywords
, be.image1
, be.image2
, be.image3
, be.formSelector
, be.image1Alignment
, be.image2Alignment
, be.image3Alignment
, be.blogEntryDisplayName
, blog_entries_published = be.published
, be.entered_by
, be.dateApproved
, be.approved_by
, blog_entry_tracking_id = bet.Id
, bet.blog
, bet.blog_entry
, bc2.Id
, bc2.BlogCategoryName
, bc2.BlogCategoryComments
, bc2.DateCreated
, bc2.BlogCategoryTitle
, bc2.BlogCategoryTemplate
, bc2.inActive
, bc2.HtmlMetaDescription
, bc2.HtmlMetaKeywords
, bc2.entry_sort_order
, bc2.per_page
, bc2.shorten_page_content
, bc2.BlogCategoryDisplayName
, bc2.published
, bc2.blogParent
FROM dbo.BlogEntries be
LEFT JOIN dbo.blog_entry_tracking bet ON be.Id = bet.blog_entry
OUTER APPLY (
SELECT TOP 1 *
FROM dbo.BlogCategories bc
WHERE bet.blog = bc.Id
) bc2
Also, I would like to mention that in this case, using of aliases in the column names decreases the size of your query and makes it more convenient for understanding.
if you just need one record back, you can use
SELECT TOP 1 dbo.BlogEntries.ID AS blog_entries_id, dbo.Bl.... (same as you have now).
it is more efficient than SELECT DISTINCT
Here is a Northwind Example.
It will return only 1 row in the Order Detail table for each Order.
Use Northwind
GO
Select COUNT(*) from dbo.Orders
select COUNT(*) from dbo.[Order Details]
select * from dbo.Orders ord
join
(select ROW_NUMBER() OVER(PARTITION BY OrderID ORDER BY UnitPrice DESC) AS "MyRowID" , * from dbo.[Order Details] innerOD) derived1
on ord.OrderID = derived1.OrderID
Where
derived1.MyRowID = 1
Order by ord.OrderID

DB2 issue Getting -101 for 300 records but same query working for 1000 and 10000 records

I am facing strange issue in Db2 .
I am getting DB2 SQL error: SQLCODE: -101, SQLSTATE: 54001, SQLERRMC: 1
The same query works for 1000 even 10000 records but does not works for particualar sets of records(150-300).I am able to reproduce now with those records.
Query uses Select and With cause only.
So I donot think increasing STMT Heap Memory will make any sense as the query works for larger records.
Query is Big and Consists of only Select Join and few Case statement.
Query is also using With statement.
#Note Every Record is independent in its own have relation with another record.
Here is Query
WITH
itemStyle_ AS (
SELECT * FROM item.itemStyle WHERE itemSTY_SEQ
---- This Parameter gets changes to 1000 only
IN( 'awudhjqwdvwd12' )
),CustomsInfo AS
(SELECT 3 AS ReitemrtGrp, 3 AS REitemRTGRP2, HSYS_NO, NHSYS_NO, itemCUSTOMSINFO.itemDEL_SEQ,-1 AS COL_NO,
itemStyle.MyApp_item_NO, itemStyle.SIZE_TNAME, itemStyle.CS_DATE, itemStyle.SIZ1TABID, itemDELIVERY.DS_NO,
itemStyle.ABM_Date, itemStyle.RS_Date,itemStyle.CustCo_NO, itemStyle.Cust_Code, itemStyle.UCustCo_No, itemStyle.Prodiv_desc, itemStyle.Busunidesc,itemStyle.COno, itemStyle.STY_NO
FROM item.itemCUSTOMSINFO itemCUSTOMSINFO INNER JOIN item.itemDELIVERY itemDELIVERY ON itemCUSTOMSINFO.itemDEL_SEQ = itemDELIVERY.itemDEL_SEQ, itemStyle_ itemStyle
WHERE (HSYS_NO IS NOT NULL OR NHSYS_NO IS NOT NULL)
AND itemCUSTOMSINFO.itemSTY_SEQ = itemStyle.itemSTY_SEQ
),
SizeInfo AS(
SELECT 1 AS ReitemrtGrp2,
itemStyle.SIZ1TABID, itemDELCOLOR.itemDEL_SEQ, itemStyle.MyApp_item_NO, itemStyle.CS_DATE, itemStyle.STY_NO,
itemStyle.ABM_Date, itemStyle.RS_Date,itemStyle.CustCo_NO, itemStyle.Cust_Code, itemStyle.UCustCo_No, itemStyle.Prodiv_desc, itemStyle.Busunidesc,itemStyle.COno,itemDELCOLOR.DS_NO,
itemColor.COL_NO,CUSIZ_CODE,
itemDELSIZE.QUANTITY,itemDELSIZE.OCP_FACTOR,itemDELSIZE.SKU_CODE,
itemSIZE.SIZE_CODE, itemSIZE.UNIT_PRC,itemSIZE.SURCHARGE,itemSIZE.SIZNUM itemSIZE_NUM, itemSIZE.UNIT_DISC, itemSIZE.PACK_UNIT
FROM
itemStyle_ AS itemStyle
INNER JOIN item.itemColor itemColor ON itemStyle.itemSTY_SEQ = itemColor.itemSTY_SEQ
INNER JOIN item.itemDELCOLOR itemDELCOLOR ON itemDELCOLOR.itemCOL_SEQ = itemColor.itemCOL_SEQ
INNER JOIN item.itemDELSIZE itemDELSIZE ON itemDELCOLOR.itemDELCOL_SEQ = itemDELSIZE.itemDELCOL_SEQ
INNER JOIN item.itemSIZE itemSIZE ON itemDELSIZE.itemSIZ_SEQ = itemSIZE.itemSIZ_SEQ
),OrderChar AS(
SELECT 3 AS ReitemrtGrp2, 2.6 AS ReitemrtGrp,
ordchar_desc, itemStyle.COno, CS_Date, SIZ1TABID, itemStyle.MyApp_item_NO, itemStyle.STY_NO,
itemStyle.ABM_Date, itemStyle.RS_Date,itemStyle.CustCo_NO, itemStyle.Cust_Code, itemStyle.UCustCo_No, itemStyle.Prodiv_desc, itemStyle.Busunidesc,itemDELIVERY.itemDEL_SEQ FROM
item.itemORDERCHAR itemOrderChar INNER JOIN itemStyle_ itemStyle ON itemOrderChar.itemSty_Seq = itemStyle.itemSty_Seq
INNER JOIN item.itemDELIVERY itemDELIVERY ON itemStyle.itemSTY_SEQ = itemDELIVERY.itemSTY_SEQ
),
Supp_Address AS (
SELECT ADDRESS.COMPANY1 AS SuppAdd_COMPANY1,
ADDRESS.COMPANY2 AS SuppAdd_COMPANY2,
ADDRESS.COMPANY3 AS SuppAdd_COMPANY3,
ADDRESS.STREET1 AS SuppAdd_STREET1,
ADDRESS.STREET2 AS SuppAdd_STREET2,
ADDRESS.STREET3 AS SuppAdd_STREET3,
ADDRESS.CITY AS SuppAdd_CITY,
ADDRESS.STATENAME AS SuppAdd_STATENAME,
ADDRESS.COUNTRY AS SuppAdd_COUNTRY,
ADDRESS.ZIP_CODE AS SuppAdd_ZIP_CODE,
SUPPLIER.SUP1COMID,
CONTACTINF.C_PHONENO, CONTACTINF.A_PHONENO, CONTACTINF.M_PHONE ,
ADDRESS.ZitemST_BOX , ADDRESS.itemST_BOX
FROM item.ADDRESS ADDRESS,
item.ORGANZN ORGANZN
LEFT OUTER JOIN item.SUPPLIER SUPPLIER
ON ORGANZN.ORG_ID=SUPPLIER.ORG_ID,
item.CONTACTINF CONTACTINF WHERE
( ADDRESS.ORG_ID=ORGANZN.ORG_ID ) AND
( CONTACTINF.ADDRESS_ID=ADDRESS.ADDRESS_ID ) AND
(
SUPPLIER.SUPP_FLAG = 'Y'
)) ,
Cust_Address AS (
SELECT VALUE(ADDRESS.COMPANY1,'') CustAdd_COMPANY1 ,
VALUE(ADDRESS.COMPANY2,'') AS CustAdd_COMPANY2,
VALUE(ADDRESS.COMPANY3,'') AS CustAdd_COMPANY3,
VALUE(ADDRESS.STREET1,'') AS CustAdd_STREET1,
VALUE(ADDRESS.STREET2,'') AS CustAdd_STREET2,
VALUE(ADDRESS.STREET3 ,'') AS CustAdd_STREET3,
VALUE(ADDRESS.CITY,'') AS CustAdd_CITY,
VALUE(ADDRESS.STATENAME,'') AS CustAdd_STATENAME,
VALUE(ADDRESS.COUNTRY ,'') AS CustAdd_COUNTRY,
VALUE(ADDRESS.ZIP_CODE ,'')AS CustAdd_ZIPCODE,
VALUE(CUSTOMER.CUST_ID ,'')AS CustAdd_CUST_ID,
VALUE(ADDRESS.ZitemST_BOX,'') AS CustAdd_ZitemST_BOX ,
VALUE(ADDRESS.itemST_BOX,'') AS CustAdd_itemST_BOX
FROM item.ADDRESS ADDRESS,
item.CUSTOMER CUSTOMER
LEFT OUTER JOIN item.ORGANZN ORGANZN
ON ORGANZN.ORG_ID=CUSTOMER.ORG_ID,
item.ORGDEFAULTS ORGDEFAULTSWHERE
( ADDRESS.ORG_ID=ORGANZN.ORG_ID )
AND (
ADDRESS.ADDRESS_ID=ORGDEFAULTS.DEFAULT_VALUE_ID ) AND
( CUSTOMER.CUST_FLAG='Y' )
AND ORGDEFAULTS.DEFAULT_ITEM = 'MAILING_ADDRESS'
SELECT VALUE(CustomsInfo.ReitemrtGrp, OrderChar.ReitemrtGrp, 3) AS ReitemrtGrp,
VALUE(SizeInfo.ReitemrtGrp2, OrderChar.ReitemrtGrp2, CustomsInfo.ReitemrtGrp2, 4) AS ReitemrtGrp2,
VALUE(itemStyle.MyApp_item_NO, CUSTOMSINFO.MyApp_item_NO, SizeInfo.MyApp_item_NO,OrderChar .MyApp_item_NO) AS MyApp_item_NO ,
itemStyle.COno ,
itemStyle.STAT_DESC ,
itemStyle.CUST_CODE ,
itemStyle.CUST_NAME ,
itemStyle.CUSTCO_NO ,
itemStyle.UCUST_CODE ,
itemStyle.UCUST_NAME ,
itemStyle.DSHIP_FLAG ,
itemStyle.STY_NO ,
itemStyle.STY_DESC ,
itemStyle.BRAND_DESC ,
itemStyle.PRODIV_DESC ,
itemStyle.CUSTY_DESC ,
itemStyle.SEA_DESC ,
itemStyle.LINNAMDESC ,
itemStyle.SUPP_CODE ,
itemStyle.SUPP_NAME,
itemStyle.CONCEPDESC ,
itemStyle.RS_DATE ,
itemStyle.ABM_DATE ,
VALUE(itemStyle.CS_DATE, CustomsInfo.CS_DATE, SizeInfo.CS_DATE, OrderChar.CS_Date) AS CS_DATE ,
itemStyle.REMARKS ,
itemStyle.LASTUPDATE ,
itemStyle.FACT_CODE ,
itemStyle.C_ORIGIN ,
itemStyle.itemDDESC,
VALUE(itemDELIVERY.DS_NO, SizeInfo.DS_NO,CustomsInfo.DS_NO) AS DS_NO ,
itemDELIVERY.CUST_DS_NO ,
itemDELIVERY.ULTCUST_DS_NO,
itemDELIVERY.LCS_DATE ,
itemDELIVERY.DTERM_DESC ,
itemSHIPINST.SHIP_MARKS ,
itemDELIVERY.PACK_INST,
itemStyle.KEY_SIZE ,
itemSHIPINST.SMODE_DESC ,
itemSHIPINST.ORIGN_itemRT ,
itemSHIPINST.DEST_itemRT ,
itemSHIPINST.CARR_DESC ,
itemSHIPINST.SPL_INST,
itemStyle.PAYM_DESC ,
itemStyle.PAYT_DESC ,
itemStyle.UCUSTCO_NO ,
itemStyle.ORD_RDATE ,
itemStyle.ORG_NAME ,
itemStyle.CUSTY_NO ,
VALUE(itemDELADDRESS.COMPANY1,'') AS DELCOMPANY1 ,
VALUE(itemDELADDRESS.COMPANY2,'') AS DELCOMPANY2 ,
VALUE(itemDELADDRESS.COMPANY3,'') AS DELCOMPANY3 ,
VALUE(itemDELADDRESS.STREET1,'') AS DELSTREET1,
VALUE(itemDELADDRESS.STREET2,'') AS DELSTREET2,
VALUE(itemDELADDRESS.STREET3,'') AS DELSTREET3,
VALUE(itemDELADDRESS.CITY,'') AS DELCITY,
VALUE(itemDELADDRESS.STATENAME,'') AS DELSTATENAME,
VALUE(itemDELADDRESS.COUNTRY,'') AS DELCOUNTRY,
VALUE(itemDELADDRESS.ZIP_CODE,'') AS DELZIP ,
VALUE(itemDELIVERY.itemDEL_SEQ , CustomsInfo.itemDEL_SEQ, SizeInfo.itemDEL_SEQ, OrderChar.itemDEL_SEQ) AS itemDEL_SEQ ,
itemStyle.DEBTOR_CODE ,
VALUE(itemADDRESS.STATENAME,'') AS STATENAME,
VALUE(itemADDRESS.COMPANY1,'') AS COMPANY1,
VALUE(itemADDRESS.COMPANY2,'') AS COMPANY2,
VALUE(itemADDRESS.COMPANY3,'') AS COMPANY3,
VALUE(itemADDRESS.STREET1,'') AS STREET1,
VALUE(itemADDRESS.STREET2,'') AS STREET2,
VALUE(itemADDRESS.STREET3,'') AS STREET3,
VALUE(itemADDRESS.CITY,'') AS CITY,
VALUE(itemADDRESS.COUNTRY,'') AS itemADDRCOUNTRY,
VALUE(itemADDRESS.ZIP_CODE,'') AS ZIP_CODE,
itemStyle.CURRENCY ,
itemStyle.CREATEDATE ,
itemStyle.SIZE_TNAME ,
itemStyle.BUSUNIDESC ,
VALUE (itemStyle.SIZ1TABID, CustomsInfo.SIZ1TABID, SizeInfo.SIZ1TABID, OrderChar.SIZ1TABID) AS SIZ1TABID,
itemStyle.DISC_VALUE ,
HSYS_NO, NHSYS_NO ,
VALUE(itemColor.COL_NO, SizeInfo.COL_NO, CustomsInfo.COL_NO) AS COL_NO,
itemColor.PROCH_DESC ,
itemColor.PROREQDESC ,
itemColor.COL_DESC ,
VALUE (itemColor.HAND_CHARGE,0) HAND_CHARGE ,
VALUE(itemColor.OTHER_CHARGES, 0) OTHER_CHARGES ,
itemColor.PERF_CODE,
SizeInfo.QUANTITY ,
SizeInfo.OCP_FACTOR ,
SizeInfo.SKU_CODE ,
SizeInfo.SIZE_CODE ,
SizeInfo.UNIT_PRC ,
SizeInfo.SURCHARGE ,
SizeInfo.itemSIZE_NUM ,
SizeInfo.UNIT_DISC,
SizeInfo.CUSIZ_CODE,
SizeInfo.PACK_UNIT,
YOUTSOLE.ITMDES AS OUTSOLEDESC, YOUTSOLE.OUTSOLE AS OUTSOLECODE,
/* (SELECT ITMDES FROM item.YCATEGO YCATEGO WHERE YCATEGO.categoid = art1sty.categoid) AS CategoDesc,
(SELECT ITMDES FROM item.YACTGRP YACTGRP WHERE YACTGRP.actgrpid = art1sty.actgrpid) AS ACTGRPDesc,*/
LEADTM_DESC AS LeadTime,
/* (SELECT SUM(VALUE(hand_charge,0) + VALUE(other_charges,0)) AS TotalCharge FROM item.itemColor itemColor WHERE itemColor.itemSTY_SEQ = itemStyle.itemSTY_SEQ) AS TotalCharge,*/
itemDelivery.AMD_Date,
OrderChar.ordchar_desc,
YPROCON.ITMDES AS PromotionContract,
(SELECT SUM(QUANTITY) FROM SizeInfo WHERE SizeInfo.MyApp_item_NO = itemStyle.MyApp_item_NO) AS OrderTotalQty,
Supp_Address.*,
Cust_Address.*,
CASE WHEN 'MyAppitemNo' = 'csDate' THEN VALUE(itemStyle.CS_Date, CustomsInfo.CS_Date, SizeInfo.CS_Date, OrderChar.CS_Date)
WHEN 'MyAppitemNo' = 'rsDate' THEN VALUE(itemStyle.RS_Date, CustomsInfo.RS_Date,SizeInfo.RS_Date, OrderChar.RS_Date)
WHEN 'MyAppitemNo' = 'lcsDate' THEN VALUE(itemStyle.CS_Date, CustomsInfo.CS_Date, SizeInfo.CS_Date, OrderChar.CS_Date)
ELSE '2010-01-01'
END AS SortDate,
CASE WHEN 'MyAppitemNo' = 'MyAppitemNo' THEN VALUE(itemStyle.MyApp_item_NO, CustomsInfo.MyApp_item_NO, SizeInfo.MyApp_item_NO, OrderChar.MyApp_item_NO)
WHEN 'MyAppitemNo' = 'MyAppCoNo' THEN VALUE(itemStyle.COno, CustomsInfo.COno, SizeInfo.COno, OrderChar.COno)
WHEN 'MyAppitemNo' = 'custCoNo' THEN VALUE(itemStyle.CustCO_NO, CustomsInfo.CustCO_NO, SizeInfo.CustCO_NO, OrderChar.CustCO_NO)
WHEN 'MyAppitemNo' = 'custCode' THEN VALUE(itemStyle.Cust_Code, CustomsInfo.Cust_Code,SizeInfo.Cust_Code, OrderChar.Cust_Code)
WHEN 'MyAppitemNo' = 'ucustCoNo' THEN VALUE(itemStyle.UCustCO_NO, CustomsInfo.UCustCO_NO, SizeInfo.UCustCO_NO, OrderChar.UCustCO_NO)
WHEN 'MyAppitemNo' = 'proDivDesc' THEN VALUE(itemStyle.Prodiv_Desc, CustomsInfo.Prodiv_Desc, SizeInfo.Prodiv_Desc, OrderChar.Prodiv_Desc)
WHEN 'MyAppitemNo' = 'busUniDesc' THEN VALUE(itemStyle.BUSUNIDESC, CustomsInfo.BusuniDesc, SizeInfo.BusuniDesc, OrderChar.BusuniDesc)
WHEN 'MyAppitemNo' = 'styNo' THEN VALUE(itemStyle.STY_NO, CustomsInfo.STY_NO, SizeInfo.STY_NO, OrderChar.STY_NO)
ELSE 'xxx'
END AS SortField
FROM itemStyle_ AS itemStyle
INNER JOIN item.itemDELIVERY itemDELIVERY ON itemStyle.itemSTY_SEQ = itemDELIVERY.itemSTY_SEQ
INNER JOIN item.itemDELCOLOR itemDELCOLOR ON itemDELCOLOR.itemDEL_SEQ = itemDELIVERY.itemDEL_SEQ
INNER JOIN item.itemColor itemColor ON itemDELCOLOR.itemCOL_SEQ = itemColor.itemCOL_SEQ
INNER JOIN item.itemSHIPINST itemSHIPINST ON itemSHIPINST.itemDEL_SEQ = itemDELIVERY.itemDEL_SEQ
INNER JOIN item.itemDELADDRESS itemDELADDRESS ON itemDELADDRESS.itemDEL_SEQ = itemDELIVERY.itemDEL_SEQ
INNER JOIN item.itemADDRESS itemADDRESS ON itemADDRESS.itemSTY_SEQ = itemStyle.itemSTY_SEQ
INNER JOIN item.ART1STY ART1STY ON ART1STY.ART1STYID = itemStyle.ART1STYID
INNER JOIN Supp_Address ON itemStyle.SUPP_ID = Supp_Address.SUP1COMID
INNER JOIN Cust_Address ON itemStyle.CUST_ID = Cust_Address.CustAdd_Cust_ID
LEFT OUTER JOIN item.ART4COS ART4COS ON itemColor.ART4COSID = ART4COS.ART4COSID
LEFT OUTER JOIN item.ART2STS ART2STS ON ART2STS.ART2STSID = ART4COS.ART2STSID
LEFT JOIN item.YPROCON YPROCON ON ART2STS.PROCONID = YPROCON.PROCONID
LEFT OUTER JOIN item.YOUTSOLE YOUTSOLE ON YOUTSOLE.OUTSOLEID = ART1STY.OUTSOLEID
FULL OUTER JOIN CustomsInfo ON 1=2
FULL OUTER JOIN SizeInfo ON 1=2
FULL OUTER JOIN OrderChar ON 1=2
ORDER BY
SortDate DESC, SortField DESC,
MyApp_item_NO ,
VALUE(DS_NO,0),
VALUE(COL_NO,0),
itemDEL_SEQ,
ReitemrtGrp,
ReitemrtGrp2 DESC, SizeInfo.itemSIZE_NUM
FOR READ ONLY
Update:
My DB is having no triggers and procedures
The Strange part is for those set of (300) records query fails but works fine for 1000 rows/records/input parameters. Any Idea.
It is because of the query statement exceed the default size of 4KB. You can set the statement heap size as the following.
db2 update db cfg for YOUR_DATABASE_NAME using STMTHEAP 8192 AUTOMATIC