Es tut mir wirklich leid, aber gerade begann mit SQL zu arbeiten Ich habe einige Arbeit an SQL vor, aber nur Updates, löscht und fügt jetzt muss ich die folgende Abfrage optimieren, die 7 Sekunden dauert für 70 Artikel.Optimierung der SQL-Abfrage, die innere Abfrage hat
Eine Tabelle mit Werbebuchungen und eine weitere Tabelle mit Lieferantenangeboten sowie eine Tabelle mit Lagerinformationen.
Ich brauche Positionen zu zeigen, mit besten 3 Anbieter bieten (Angebot 1- Angebot 1 Name - Angebot 1 Kommentar) und auch Lager Informationen
Könnten Sie mir bitte darüber helfen, und lehre mich, einen Weg zu machen meine Abfragen schnell.
Danke,
declare @usd nvarchar(10)
declare @gbp nvarchar(10)
declare @euro nvarchar(10)
set @usd=(select top 1 KUR from _APPA_WEB_KUR WHERE CURRENCY = 'USD' ORDER BY INCKEYNO DESC)
set @gbp=(select top 1 KUR from _APPA_WEB_KUR WHERE CURRENCY = 'GBP' ORDER BY INCKEYNO DESC)
set @euro=(select top 1 KUR from _APPA_WEB_KUR WHERE CURRENCY = 'EURO' ORDER BY INCKEYNO DESC)
SELECT
item.INCKEYNO, COMMENT, item.SIRA, item.[FILE_NUMBER], [REFERANCE_NO],
[GROUP_ID], [IMPA_CODE], [DESCRIPTION], [UNIT], [QTTY],
item.[CREATED_BY], item.[DATE], removed,
(SELECT TOP 1 (isnull
((SELECT cast(sum(STHAR_GCMIK) AS int)FROM TBLSTHAR
WHERE STHAR_GCKOD = 'G' AND TBLSTHAR.STOK_KODU LIKE ('%' + item.IMPA_CODE + '%') AND sthar_htur != 'L' AND SUBE_KODU = '4'), 0) - isnull
((SELECT cast(sum(STHAR_GCMIK) AS int)
FROM TBLSTHAR
WHERE STHAR_GCKOD = 'C' AND TBLSTHAR.STOK_KODU LIKE ('%' + item.IMPA_CODE + '%') AND sthar_htur != 'L' AND SUBE_KODU = '4'), 0)) AS bakiye
FROM TBLSTHAR) AS depo4,
(SELECT TOP 1 (isnull
((SELECT cast(sum(STHAR_GCMIK) AS int)
FROM TBLSTHAR WHERE STHAR_GCKOD = 'G' AND TBLSTHAR.STOK_KODU LIKE ('%' + item.IMPA_CODE + '%') AND sthar_htur != 'L' AND SUBE_KODU = '2'), 0)
- isnull ((SELECT cast(sum(STHAR_GCMIK) AS int) FROM TBLSTHAR WHERE STHAR_GCKOD = 'C' AND
TBLSTHAR.STOK_KODU LIKE ('%' + item.IMPA_CODE + '%') AND sthar_htur != 'L' AND SUBE_KODU = '2'), 0)) AS bakiye
FROM TBLSTHAR) AS depo2,
(SELECT TOP 1 ([SECILI_FIYAT])
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO
ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS OFFER1,
(SELECT TOP 1 SUPPLIER_ID
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO
ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS order1_supplier,
(SELECT TOP 1 COMMENT
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO
ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS order1_comment,
(SELECT dbo.trk(cari_isim)
FROM TBLCASABIT
WHERE CARI_KOD = (SELECT SUPPLIER_ID
FROM (SELECT SUPPLIER_ID, PRICE, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 1)) AS offer1cari,
(SELECT [SECILI_FIYAT]
FROM (SELECT SECILI_FIYAT, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 2) AS OFFER2,
(SELECT SUPPLIER_ID
FROM (SELECT SUPPLIER_ID, SECILI_FIYAT, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 2) AS order2_supplier,
(SELECT dbo.trk(cari_isim)
FROM TBLCASABIT
WHERE CARI_KOD =(SELECT SUPPLIER_ID
FROM (SELECT SUPPLIER_ID, PRICE, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 2)) AS offer2cari,
(SELECT COMMENT
FROM (SELECT COMMENT, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 2) AS order2_comment,
(SELECT [SECILI_FIYAT]
FROM (SELECT [SECILI_FIYAT], vat, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 3) AS OFFER3,
(SELECT SUPPLIER_ID
FROM (SELECT SUPPLIER_ID, SECILI_FIYAT, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 3) AS order3_supplier,
(SELECT dbo.trk(cari_isim)
FROM TBLCASABIT
WHERE CARI_KOD =(SELECT SUPPLIER_ID
FROM (SELECT SUPPLIER_ID, SECILI_FIYAT, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 3)) AS offer3cari,
(SELECT COMMENT
FROM (SELECT COMMENT, ROW_NUMBER() OVER (ORDER BY CAST(isnull(SECILI_FIYAT, 0) AS DECIMAL(18, 2)) ASC) AS Salary_Order
FROM [dbo].[_APPA_SUPPLIER_OFFER_SECILI_FIYATLI_VIEW]
WHERE FILE_NUMBER = item.file_number AND IMPA_CODE = item.IMPA_CODE AND PRICE IS NOT NULL AND REFERANCE_NO = item.REFERANCE_NO) DT
WHERE DT.Salary_Order = 3) AS order3_comment, @euro AS EURO, @gbp AS GBP, @usd AS USD, mas.CURRENCY,
'0' depo4_fiyat,'0' depo2_fiyat, item.price, item.supplier
FROM [dbo].[_APPA_WEB_PURCHASE_OFFER_LINE_ITEMS_2] item LEFT OUTER JOIN
dbo._APPA_WEB_PURCHASE_OFFER_MASTER AS mas ON mas.FILE_NUMBER = item.FILE_NUMBER
WHERE (item.removed != 1 OR
item.removed IS NULL)
vor mit komplexer Abfrage starten sollte besser lernen, richtig SQL ..starting mit einfacher Abfrage und kommen ..... Sie sind in falschem Weg SQL verwenden .. – scaisEdge
könnten Sie mir bitte zeigen Wo sind meine Fehler und wie könnte ich sie beheben? – burc
Sie haben mehrere unsachgemäße Verwendung von SQL .. die relevanteste ist eine systematische Verwendung von Subselect anstelle der richtigen Join .. – scaisEdge