T-SQL 嵌套子查询

Posted

技术标签:

【中文标题】T-SQL 嵌套子查询【英文标题】:T-SQL Nested Subquery 【发布时间】:2010-07-08 10:19:35 【问题描述】:

我想将此工作代码放在 SQL 语句中,或者我需要执行 UDF。

结果集是单行连接,我希望将其放置在整个结果集的每一行中。

----

MAIN QUERY

SELECT
    H.CONNECTION_ID,
   H.SEQUENTIAL_NO,
   H.INVOICE_NUMBER,
   H.INVOICE_DATE,
   H.LAST_INVOICE_NUMBER,
   H.LAST_INVOICE_DATE,
   CAST(CASE
      WHEN H.COLLECT_DEPOSIT = 1 THEN '-'
      ELSE CAST(H.PAYMENT_DUE_DATE AS NVARCHAR(20))
   END AS SMALLDATETIME) AS PAYMENT_DUE,
   H.JOB_NUMBER,
   H.CUST_JOB_NUMBER,
   HDR.SALES_PERSON,
   H.INSIDE_SALES_PERSON,
   H.IS_LAST_INVOICE,
   CASE
      WHEN H.COLLECT_DEPOSIT = 1 THEN 'CASH'
      ELSE H.PAYMENT_TERMS_DESCRIPTION
   END AS PAYMENT_TERMS,
   H.PRINTED,
   H.NOTES,
   CUR.ID,
   CUR.CODE,
   CASE CUR.CODE
      WHEN 'USD' THEN '001-106624-211'
      WHEN 'EUR' THEN '001-106624-101'
      WHEN 'GBP' THEN '001-106624-100'
      ELSE '001-106624-001'
   END AS BANK_ACCT,
   CUR.EXCHANGE_RATE,
   H.BILL_CONTACT,
   H.CUST_ACCOUNT, 
   H.CUST_NAME, 
   H.CUST_ADDR1, 
   H.CUST_ADDR2, 
   H.CUST_CITY, 
   H.CUST_STATE, 
   H.CUST_ZIP,
   H.CONTACT_PHONE_NUMBER,
   H.CONTACT_PHONE_NUMBER2,
   H.ORDERED_BY_CONTACT,
   H.SHIP_TO_NAME, 
   H.SHIP_TO_ADDR1, 
   H.SHIP_TO_ADDR2, 
   H.SHIP_TO_CITY, 
   H.SHIP_TO_STATE, 
   H.SHIP_TO_ZIP,
   H.SITE_PHONE_NUMBER,
   H.SITE_PHONE_NUMBER2,
   H.OFFICE_NAME,
   H.OFFICE_ADDR1,
   H.OFFICE_ADDR2,
   H.OFFICE_CITY,
   H.OFFICE_STATE,
   H.OFFICE_ZIP,
   H.OFFICE_PHONE_NUMBER,
   H.OFFICE_FAX_NUMBER,
   H.DELIVERY_TICKET_NUMBER,
   H.PO_NUMBER,
   H.DUMMY_INVOICE_TEXT,
   (SELECT MESSAGE FROM REPORT_MESSAGES WHERE CODE = 'INVOICE') ADVERT_MESSAGE,
   (SELECT MAX(DISCOUNT_PERCENTAGE) FROM PRTINVITEM I2 WHERE I2.CONNECTION_ID = H.CONNECTION_ID AND I2.INVOICE_NUMBER = H.INVOICE_NUMBER) AS MAX_DISCOUNT,
   I.ITEM,
   I.DESCRIPTION,
   I.QUANTITY,
   I.UNIT_OF_MEASURE,
   I.MINIMUM_CHARGE,
   I.WEEKLY_CHARGE,
   I.MONTHLY_CHARGE,
   I.START_OF_BILLING_PERIOD,
   I.END_OF_BILLING_PERIOD,
   I.DAYS_USED,
   I.WEEKS_USED,
   I.DISCOUNT_PERCENTAGE,
   I.TAX_CODE_FOR_ITEM,
   I.INVENTORY_TYPE,
   I.BILLING_LOGIC_TYPE,
   I.ACTUAL_WEEKLY_CHARGE_USED,
   I.DAYS_IN_ACTUAL_WEEKLY_CHARGE,
   II.CHARGEABLE_DAYS,
      II.CHARGEABLE_WEEKS,
   II.CHARGEABLE_MONTHS,
   II.FREE_DAYS_THIS_INVOICE,
   CNV.TOTAL_NET_VALUE,
   CNV.TOTAL_TAX_VALUE,
   CNV.TOTAL_GROSS_VALUE, 
   CNV.TOTAL_GROSS_VALUE_NS, 
   CNV.NET_LINE_VALUE,
   CMP.EMAIL_ADDRESS
FROM (PRTINVHDR H INNER JOIN PRTINVITEM I ON H.CONNECTION_ID = I.CONNECTION_ID AND H.INVOICE_NUMBER = I.INVOICE_NUMBER)
INNER JOIN INVOICEHDR HDR ON I.INVOICE_NUMBER = HDR.INVNO
INNER JOIN CUSTOMERS CST ON H.CUST_ACCOUNT = CST.CUSTNUM
INNER JOIN JOB JOB ON H.JOB_NUMBER = JOB.JOBNUM
INNER JOIN CURRENCY CUR ON HDR.CURRENCY_ID = CUR.ID
INNER JOIN VWCURRENCYCONVERSION CNV ON I.CONNECTION_ID = CNV.CONNECTION_ID AND I.INVC_UCOUNTER = CNV.INVC_UCOUNTER
INNER JOIN COMPANY CMP ON H.OFFICE_CODE = CMP.OFFICE
INNER JOIN INVOICEITEM II ON I.INVOICE_NUMBER = II.INVNO AND I.INVC_UCOUNTER = II.INVC_UCOUNTER
ORDER BY
   H.SEQUENTIAL_NO,
   I.PRINT_SEQUENCE
ASC

----

COALESCE QUERY

DECLARE 
   @DTICKET NVARCHAR(20),
   @PUMPCATEGORYNAME NVARCHAR(3999)

   SET @DTICKET = ''
   SET @PUMPCATEGORYNAME = NULL

(SELECT
   @DTICKET = DTICKET,
   @PUMPCATEGORYNAME = COALESCE(@PUMPCATEGORYNAME + ', ', '' ) + PUMPCATEGORYNAME
FROM (SELECT
      BHDR.DTICKET,
      SCD.PUMPCATEGORYNAME
   FROM PRTTICKHDR PHDR
   INNER JOIN BIDHDR BHDR ON PHDR.DELIV_TICKET_NUMBER = BHDR.DTICKET
   INNER JOIN PRTTICKITEM PITM ON PHDR.CONNECTION_ID = PITM.CONNECTION_ID AND PHDR.DELIV_TICKET_NUMBER = PITM.DELIV_TICKET_NUMBER
   LEFT JOIN SUBCATEGORYDESCRIPTION SCD ON PITM.ITEM = SCD.PUMPCATEGORY
   WHERE SCD.PUMPCATEGORYNAME IS NOT NULL)
SUBCATEGORYDESCRIPTION)

SELECT @DTICKET, @PUMPCATEGORYNAME

【问题讨论】:

什么版本的 SQL Server?你能格式化你的代码吗(最好删除任何与问题无关的代码) How do I Create a Comma-Separated List using a SQL Query?的可能重复 【参考方案1】:

不太确定您要的是什么,但您可以按照以下方式做一些事情

Select col1 + ', ' + col2 + ', ' + col3 etc....

【讨论】:

以上是关于T-SQL 嵌套子查询的主要内容,如果未能解决你的问题,请参考以下文章

求SQL相关子查询和嵌套子查询通俗的区别 ?

SQL相关子查询和嵌套子查询的区别

相关子查询 与 嵌套子查询 有何区别 ?

关于SQL DELETE嵌套子查询问题

T-SQL查询2

SQL Server 之 子查询与嵌套查询