2013-05-27 2 views
-4

다른 결과를 반환하는 다른 sql 있습니다. 그리고 모든 현명한 열으로 가져올 필요가 있습니다. 하지만 어떻게 해야할지 모르겠 군. 누구든지 제발 도와 주실 수 있니? 여기 >>>하나 이상의 SQL에서 열을 결과로 얻으십시오

SELECT "one" AS value_1, 
    "two" AS value_2 

SELECT "three" AS value_3, 
    "four" AS value_4 

SELECT "five" AS value_5, 
    "six" AS value_6 

주요 쿼리 아래에있는 내 SQL 1 >>>

SELECT -- lat.`group_info_id`, gi.`group_name`, 
    SUM(lat.`principal_outstanding`) AS principalOutstanding -- , SUM(lat.`accrued_interest`) AS interestReceivable, SUM(lat.`realizable_interest`) AS interestRealizable 
    -- , SUM(lat.`principal_outstanding`)+SUM(lat.`accrued_interest`)+SUM(lat.`realizable_interest`) AS loanDue, SUM(lat.`outstanding_balance`) AS totalLoanDue 
FROM loan_account_transaction AS lat 
INNER JOIN loan_account AS la ON (la.id = lat.`loan_account_id`) 
LEFT JOIN group_info AS gi ON (gi.id = lat.`group_info_id`) 
INNER JOIN 
(
SELECT MAX(ilat.id) AS max_lat_id, ilat.loan_account_id 
FROM loan_account_transaction AS ilat 
WHERE ilat.`domain_status_id` = 1 AND ilat.`office_info_id` = (SELECT id FROM office_info WHERE office_code = 'UG500002') 
AND ilat.`project_info_id` IN ('BI0000000000000000000004') AND ilat.transaction_date <= '2013-04-30' 
GROUP BY ilat.loan_account_id 
) AS tlat ON (tlat.loan_account_id = lat.`loan_account_id` AND tlat.max_lat_id = lat.id) 
WHERE lat.`office_info_id` = (SELECT id FROM office_info WHERE office_code = 'UG500002') 
AND lat.`project_info_id` IN ('BI0000000000000000000004') 
AND lat.`loan_status_id` != 2 AND lat.`loan_status_id` != 7 AND la.`domain_status_id` = 1 AND lat.`domain_status_id` = 1 

주요 질의 2 >>>

SELECT  SUM(CASE WHEN la.loan_duration = 12 THEN 1 ELSE 0 END) AS total_count_40, 
    SUM(CASE WHEN la.loan_duration = 12 THEN IFNULL(la.disbursed_amount,0) ELSE 0 END) AS disbursed_amount_40, 
    SUM(CASE WHEN la.loan_duration = 6 THEN 1 ELSE 0 END) AS total_count_20, 
    SUM(CASE WHEN la.loan_duration = 6 THEN IFNULL(la.disbursed_amount,0) ELSE 0 END) AS disbursed_amount_20 
FROM loan_account AS la 
INNER JOIN member_info AS mi ON (la.disbursement_date <='2013-04-30' 
    AND la.project_info_id IN ('BI0000000000000000000004') 
    AND la.domain_status_id = 1 AND la.member_id=mi.id) 
INNER JOIN office_info AS oi 
ON(oi.id = 'BI0000000000000000000363' AND mi.branch_info_id = oi.id) 

** 새 >>>

입니다
SELECT COUNT(1), SUM(principal_outstanding) 
FROM 
(

/* Current Loan */ 
     SELECT tempData.country_id, 
     tempData.project_info_id, 
     tempData.prodId, 
     tempData.loan_name, 
     tempData.office_info_id, 
     office_info.office_code, 
     office_info.office_name, 
     tempData.group_info_id, 
     group_info.group_code, 
     group_info.group_name, 
     missed_days, 
     SUM(tempData.principal_outstanding) AS principal_outstanding, 
     COUNT(DISTINCT member_id) AS borrower_count 

     FROM (
       SELECT lat.country_id,lat.office_info_id,lat.project_info_id, lp.id AS prodId, lp.`loan_name`, 
       lat.group_info_id, 
       lat.principal_outstanding,la.member_id, 

       (CEIL(lat.overdue_amount/la.installment_amount) * 
         CASE WHEN lpp.policy_repayments_plan_id = 1 THEN 
          1 
         WHEN lpp.policy_repayments_plan_id = 2 THEN 
          7 
         WHEN lpp.policy_repayments_plan_id = 3 THEN 
          30 
         WHEN lpp.policy_repayments_plan_id = 4 THEN 
          365 
         END) AS missed_days 
       FROM loan_account_transaction AS lat 
       INNER JOIN loan_account AS la ON (la.id = lat.loan_account_id) 
       INNER JOIN loan_product AS lp ON (la.`product_info_id` = lp.`id`) 
       INNER JOIN loan_product_policy AS lpp ON(lpp.id = la.policy_info_id) 
       INNER JOIN (SELECT MAX(lat2.id) AS max_lat2_id,lat2.loan_account_id FROM loan_account_transaction AS lat2 
       WHERE lat2.transaction_date <= '2013-03-31' AND 
       lat2.domain_status_id = 1 AND 
       lat2.country_id IN (1) AND 
       lat2.office_info_id IN ('BI0000000000000000000363') AND 
       lat2.project_info_id IN ('BI0000000000000000000004') 
       GROUP BY lat2.loan_account_id 
      ) AS temp ON lat.id = temp.max_lat2_id 
      WHERE (lat.loan_status_id= 1 OR lat.loan_status_id IS NULL) 
     ) AS tempData 
     INNER JOIN office_info ON (office_info.id = tempData.office_info_id) 
     LEFT JOIN group_info ON (group_info.id = tempData.group_info_id) 
     WHERE missed_days > 30 
     GROUP BY 
     tempData.country_id, 
     tempData.office_info_id, 
     tempData.project_info_id, 
     tempData.prodId, 
     tempData.group_info_id, 
     missed_days 

UNION 

/* Late and NIBL Loan */ 
     SELECT tempData.country_id,tempData.project_info_id, 
       tempData.prodId, 
     tempData.loan_name, 
       tempData.office_info_id,office_info.office_code,office_info.office_name, 
       tempData.group_info_id,group_info.group_code,group_info.group_name, 
       tempData.missed_days,SUM(tempData.principal_outstanding) AS principal_outstanding, 
       COUNT(DISTINCT tempData.member_id) AS borrower_count 
     FROM 
     (SELECT lat.country_id,lat.office_info_id,lat.project_info_id, lp.id AS prodId, lp.`loan_name`, 
       lat.group_info_id, 
        (CASE WHEN lat.loan_status_id = 3 THEN 
         (la.loan_duration*30) -- +(la.loan_duration*30/2) 
        WHEN lat.loan_status_id = 4 THEN 
         (la.loan_duration*30) -- *2 
        WHEN lat.loan_status_id = 5 THEN 
         (la.loan_duration*30) -- *2+7 
        WHEN lat.loan_status_id = 6 THEN 
         (la.loan_duration*30) -- *2+7 
        END) AS missed_days, 
       lat.principal_outstanding,la.member_id 
       FROM loan_account_transaction AS lat 
       INNER JOIN loan_account AS la ON (la.id = lat.loan_account_id) 
       INNER JOIN loan_product AS lp ON (la.`product_info_id` = lp.`id`) 
       INNER JOIN (SELECT MAX(lat2.id) AS max_lat2_id,lat2.loan_account_id FROM 
       loan_account_transaction AS lat2 
       WHERE lat2.transaction_date <= '2013-03-31' AND 
       lat2.domain_status_id = 1 AND 
       lat2.country_id IN (1) AND 
       lat2.office_info_id IN ('BI0000000000000000000363') AND 
       lat2.project_info_id IN ('BI0000000000000000000004') 
       GROUP BY lat2.loan_account_id 
      ) AS temp ON lat.id = temp.max_lat2_id 
       WHERE (lat.loan_status_id != 2 AND lat.loan_status_id != 7 AND lat.loan_status_id = 1) 
     ) AS tempData 
     INNER JOIN office_info ON (office_info.id = tempData.office_info_id) 
     LEFT JOIN group_info ON (group_info.id = tempData.group_info_id) 
     GROUP BY tempData.country_id, 
     tempData.office_info_id, 
     tempData.project_info_id, 
     tempData.prodId, 
     tempData.group_info_id, 
     missed_days 

     ) AS t 
     GROUP BY t.prodId 
+2

MySQL 또는 SQL 서버 또는 둘 다? 또한 3 개의 쿼리가 다른 수의 결과를 제공하는 경우 원하는 결과를 추가 할 수 있습니까? –

+0

열 현명한 무엇입니까 ??? – Alex

+0

행을 현명하게하고 프로그래밍 언어를 사용하여 행렬 전치를 수행하십시오. (게으른 해결책) – diegoperini

답변

1

,

select * from 
    (
     (SELECT 'one' AS value_1, 'two' AS value_2) A 

    JOIN (SELECT 'three' AS value_3, 'four' AS value_4) B ON 1=1 

    JOIN (SELECT 'five' AS value_5, 'six' AS value_6) C ON 1=1 
    ) 
새 질문에 대한

SQL FIDDLE DEMO

답변

:

나는이 F 확실하지 않다가 작동하는 것입니다. 그러나 그것을 시도하십시오.

SELECT * from 
(SELECT COUNT(1) COUNT1, SUM(principal_outstanding) SUM1 
FROM 
(

/* Current Loan */ 
     SELECT tempData.country_id, 
     tempData.project_info_id, 
     tempData.prodId, 
     tempData.loan_name, 
     tempData.office_info_id, 
     office_info.office_code, 
     office_info.office_name, 
     tempData.group_info_id, 
     group_info.group_code, 
     group_info.group_name, 
     missed_days, 
     SUM(tempData.principal_outstanding) AS principal_outstanding, 
     COUNT(DISTINCT member_id) AS borrower_count 

     FROM (
       SELECT lat.country_id,lat.office_info_id,lat.project_info_id, lp.id AS prodId, lp.`loan_name`, 
       lat.group_info_id, 
       lat.principal_outstanding,la.member_id, 

       (CEIL(lat.overdue_amount/la.installment_amount) * 
         CASE WHEN lpp.policy_repayments_plan_id = 1 THEN 
          1 
         WHEN lpp.policy_repayments_plan_id = 2 THEN 
          7 
         WHEN lpp.policy_repayments_plan_id = 3 THEN 
          30 
         WHEN lpp.policy_repayments_plan_id = 4 THEN 
          365 
         END) AS missed_days 
       FROM loan_account_transaction AS lat 
       INNER JOIN loan_account AS la ON (la.id = lat.loan_account_id) 
       INNER JOIN loan_product AS lp ON (la.`product_info_id` = lp.`id`) 
       INNER JOIN loan_product_policy AS lpp ON(lpp.id = la.policy_info_id) 
       INNER JOIN (SELECT MAX(lat2.id) AS max_lat2_id,lat2.loan_account_id FROM loan_account_transaction AS lat2 
       WHERE lat2.transaction_date <= '2013-03-31' AND 
       lat2.domain_status_id = 1 AND 
       lat2.country_id IN (1) AND 
       lat2.office_info_id IN ('BI0000000000000000000363') AND 
       lat2.project_info_id IN ('BI0000000000000000000004') 
       GROUP BY lat2.loan_account_id 
      ) AS temp ON lat.id = temp.max_lat2_id 
      WHERE (lat.loan_status_id= 1 OR lat.loan_status_id IS NULL) 
     ) AS tempData 
     INNER JOIN office_info ON (office_info.id = tempData.office_info_id) 
     LEFT JOIN group_info ON (group_info.id = tempData.group_info_id) 
     WHERE missed_days > 30 
     GROUP BY 
     tempData.country_id, 
     tempData.office_info_id, 
     tempData.project_info_id, 
     tempData.prodId, 
     tempData.group_info_id, 
     missed_days) g1 
     GROUP BY g1.prodId)t1 



/* Late and NIBL Loan */ 
     JOIN (SELECT COUNT(1) COUNT2, SUM(principal_outstanding) SUM2 
FROM(SELECT tempData.country_id,tempData.project_info_id, 
       tempData.prodId, 
     tempData.loan_name, 
       tempData.office_info_id,office_info.office_code,office_info.office_name, 
       tempData.group_info_id,group_info.group_code,group_info.group_name, 
       tempData.missed_days,SUM(tempData.principal_outstanding) AS principal_outstanding, 
       COUNT(DISTINCT tempData.member_id) AS borrower_count 
     FROM 
     (SELECT lat.country_id,lat.office_info_id,lat.project_info_id, lp.id AS prodId, lp.`loan_name`, 
       lat.group_info_id, 
        (CASE WHEN lat.loan_status_id = 3 THEN 
         (la.loan_duration*30) -- +(la.loan_duration*30/2) 
        WHEN lat.loan_status_id = 4 THEN 
         (la.loan_duration*30) -- *2 
        WHEN lat.loan_status_id = 5 THEN 
         (la.loan_duration*30) -- *2+7 
        WHEN lat.loan_status_id = 6 THEN 
         (la.loan_duration*30) -- *2+7 
        END) AS missed_days, 
       lat.principal_outstanding,la.member_id 
       FROM loan_account_transaction AS lat 
       INNER JOIN loan_account AS la ON (la.id = lat.loan_account_id) 
       INNER JOIN loan_product AS lp ON (la.`product_info_id` = lp.`id`) 
       INNER JOIN (SELECT MAX(lat2.id) AS max_lat2_id,lat2.loan_account_id FROM 
       loan_account_transaction AS lat2 
       WHERE lat2.transaction_date <= '2013-03-31' AND 
       lat2.domain_status_id = 1 AND 
       lat2.country_id IN (1) AND 
       lat2.office_info_id IN ('BI0000000000000000000363') AND 
       lat2.project_info_id IN ('BI0000000000000000000004') 
       GROUP BY lat2.loan_account_id 
      ) AS temp ON lat.id = temp.max_lat2_id 
       WHERE (lat.loan_status_id != 2 AND lat.loan_status_id != 7 AND lat.loan_status_id = 1) 
     ) AS tempData 
     INNER JOIN office_info ON (office_info.id = tempData.office_info_id) 
     LEFT JOIN group_info ON (group_info.id = tempData.group_info_id) 
     GROUP BY tempData.country_id, 
     tempData.office_info_id, 
     tempData.project_info_id, 
     tempData.prodId, 
     tempData.group_info_id, 
     missed_days 

     ) AS g2 
     GROUP BY g2.prodId) t2 ON 1=1 
+0

그것은 작동합니다. 감사. 제발 좀 더 도와주세요. 두 행과 두 개의 필드에 결과를 반환하는 sql 있습니다. 그러나 결과를 한 행과 네 칸에 넣고 싶습니다. 새 쿼리로 업로드하고 있습니다. 이걸 좀 도와 주실 수 있습니까? –

+0

업데이트하십시오. 내가 할 수 있으면 너를 도울 것이다. – Maximus

+0

SQL 게시가 업데이트되었습니다. –

0

이게 무슨 뜻일까요?

SELECT id, column1 AS data 
FROM table1 
UNION 
SELECT id, column2 AS data 
FROM table2 
UNION 
SELECT id, column3 AS data 
FROM table3; 

column1, column2, column3 모두 같은 데이터 형식을 가지고 있고, 같은 이름을 가진 그들을 앨리어싱은 UNION의 작업을 할 수 있습니다 무엇을해야합니다. 유 아래 쿼리를 사용할 수 있습니다

+0

답장을 보내 주셔서 감사합니다. 그러나 공용체를 사용하면 결과에 적절한 열 이름이 표시되지 않습니다. 내 원래의 쿼리를 제공하고 있습니다. 그건 크다. 그래서 내가 이런 식으로 게시했습니다. 내가 필요로하는 모든 것은 그 열렬한 결과를 칼럼으로 원한다는 것입니다. 그게 다야. –

0
  
WITH cte (value1, value2) 
         AS (SELECT 'ONE' AS value_1 , 
            'TWO' AS value_2 
         ), 
        cte2 
         AS (SELECT 'THREE' AS value_3 , 
            'FOUR' AS value_4 
         ), 
        cte3 
         AS (SELECT 'FIVE' AS value_5 , 
            'SIX' AS value_6 
         ) 
       SELECT * 
       FROM cte , 
         cte2 , 
         cte3 

+0

당신이 이것을 찾고 있다고 생각합니다. – Ahmed

+0

친애하는 친구, 아니 행운 –

관련 문제