ODBC 接続を作成して、Excel ファイルから直接 MySQL データベースにクエリを実行します。これは、元の MySQL データベースと Microsoft Query からの接続の両方で完璧に機能する約 60 の select ステートメントを含む非常に複雑なクエリです。ただし、結果を Excel シートに公開すると、2 つを除くすべての列が表示されます (どちらにも ## <-- THIS!!! コメントがあります)。
select
nom_client as Custname
,case when locate('/',nom_voyageur) > 0
then substring(nom_voyageur,1,locate('/',nom_voyageur)-1)
else nom_voyageur end as Lastname
,case when locate('/',nom_voyageur) > 0
then substring(nom_voyageur,locate('/',nom_voyageur) + 1, length(nom_voyageur)-locate('/',nom_voyageur))
else '' end as Firstname
,zone_stat_1 as Empcode
,concat(substring(booker,locate(' ',booker) + 1, length(booker)-locate(' ',booker)),' ',substring(booker,1,locate(' ',booker)-1)) as Booker
,zone_stat_3 as 'Euronext TAF Approver level 2'
,'' as "Trip Reason"
,prestation_name as Vendor
,departure_date as Servicedate
,'' as Savings
,advance_purchase as Advpurchgroup
, tickets_number as Ticketcount
, '' as Triplength
,'' as 'Class of Service'
,case Activite when 1 then 'Rail'
when 2 then 'Hotel'
when 3 then 'Maritime'
when 4 then 'Fees / Regulations'
when 5 then 'Air'
when 6 then 'Frais'
when 7 then 'Visa / Shipments / Subscriptions / ESTA' end as Producttype
,case when length(trajet_origine_destination) > length(replace(trajet_origine_destination,'/',''))
then substring(trajet_origine_destination,1,locate('/',trajet_origine_destination)-1)
else trajet_origine_destination end as 'Origin Cityname'
,case when length(trajet_origine_destination) > length(replace(trajet_origine_destination,'/',''))
then substring(trajet_origine_destination,locate('/',trajet_origine_destination) + 1, length(trajet_origine_destination)-locate('/',trajet_origine_destination))
else trajet_origine_destination end as 'Destination Cityname'
,'Invoice' as Fop
,'APInv' as 'Journal Name'
,Invoice_date as 'Invoice Date'
,'Vendor' as 'Account Type'
,'' as LCOA
,640139 as 'Main Account'
,Zone_stat_2 as 'Cost Center'
,'' as Project
,'' as MarketSegment
,'' as Custumer
,'FAES000528' as Supplier
,'' as Intercompany
,'' as Product
,'' as Dim9
,'' as Dim10
,'Ledger' as OffAccountType
,'' as OffMainAccount
,'' as OffsetLCOA
,'' as OffCostCenter
,'' as OffProject
,'' as OffMarketSegment
,'' as OffCustomer
,'' as OffSupplier
,'' as OffIntercompany
,'' as OffProduct
,'' as OffDim9
,'' as OffDim10
,concat('FCM-Invoice ',numero_facture,' - ',prestation_name,' - ',substring(nom_voyageur,1,locate('/',nom_voyageur)-1),' ',substring(nom_voyageur,locate('/',nom_voyageur) + 1, length(nom_voyageur)-locate('/',nom_voyageur))) as Description ## <-- THIS!!!
,'EUR' as CurrencyCode
,case when Montant_vente > 0 then Montant_vente else 0 end as AmountCurDebit
,case when Montant_vente < 0 then Montant_vente*-1 else 0 end as AmountCurCredit
,case when Montant_vente > 0 then Montant_vente else 0 end as FunctionalCUrDebit
,case when Montant_vente < 0 then Montant_vente*-1 else 0 end as FunctionalCurCredit
,'AP Posting' as PostingProfile
,'Electronic' as PaymMode
,'INMEDIATE' as Payment
,concat(year(now()),'-',if(month(now())<10,concat('0',month(now())),month(now())),'-13') as Due ## <-- THIS!!!
,'AP_DOM' as 'TaxGroup'
,case activite when 6 then 'HIGH_S' else 'EXEMPT' end as TaxItemGroup
,'' as DocumentNum
,Invoice_date as DocumentDate
,numero_facture as Invoice
,'' as Prepayment
,'' TaxCode
,'' ExchRate
,'No' as ReverseEntry
,'' as ReverseDate
,'FAES' as Company
,'FAES' as OffsetCompany
from extrait_sapeig_stat e
where mot_dir_client = 'ETT'
and invoice_year = year(date_add(now(),Interval -1 month)) and invoice_month = month(date_add(now(),Interval -1 month))
and activite != 11
order by invoice_date, numero_facture;
簡単にするために、これらは誤動作のステートメントです
',substring(nom_voyageur,locate('/',nom_voyageur) + 1, length(nom_voyageur)-locate('/',nom_voyageur))) as Description ## <-- THIS!!!
,concat(year(now()),'-',if(month(now())<10,concat('0',month(now())),month(now())),'-13') as Due ## <-- THIS!!!
なぜ彼らが失敗しているのか、私にはわかりません。同じクエリに既に長いステートメントがあり、関数 concat() も既に機能しています。インデントされた関数が 3 つを超えるステートメントには問題があると思いますが、よくわかりません。
これが失敗する理由について何か考えがあれば、それは私を大いに助けてくれます
Microsoft Query での正しい結果
Excel シートで説明列が消えた