首页 > 解决方案 > 我应该把税率的 AS 条款 (VAT_RATE) 放在哪里

问题描述

我想在这个 SELECT 语句中添加一个 AS VAT_RATE,但我不知道在哪里。

SELECT ROW_NUMBER() OVER(ORDER BY QD.DETAIL_ID) AS No,  
 QD.PRODUCT_ID AS PROD_ID,PM.'+@ProdCode+' AS PROD_CODE,pm.DESCRIPTION AS SHORT_DESC,  
 QD.CORPORATE_PRICE AS Corpo_Price,CONVERT(DECIMAL(18,2),QD.RETAIL_PRICE) AS UNIT_SP,QD.COST_PRICE AS COST_SP,  
 QD.GM,QD.DETAIL_ID,QD.DISC AS Discount,QD.NOTE,

    VAT_RATE=(SELECT VAT_RATE/100 FROM dbo.vat   
    WHERE VAT_ID=(SELECT TOP 1 VAT_ID FROM dbo.product_detail(NOLOCK) WHERE PRODUCT_ID=PM.PROD_ID))

,  
   Img=(SELECT TOP 1 IMAGE_DATA FROM dbo.PRODUCT_IMAGE WHERE PRODUCT_ID=PM.PROD_ID), QD.CostPrice_Percentage  
 FROM dbo.CUSTOMER_QUOTATION_DETAIL(NOLOCK) QD  
 JOIN dbo.product_master(NOLOCK) PM ON PM.PROD_ID=QD.PRODUCT_ID

标签: sqlsql-servertsql

解决方案


在 TSQL 中,你有 3 种方式来命名你的列

1) 使用 AS(在 tsql 中可选)

SELECT QD.PRODUCT_ID AS PROD_ID
FROM dbo.CUSTOMER_QUOTATION_DETAIL(NOLOCK) QD  

2)没有AS(因为它是可选的)

SELECT QD.PRODUCT_ID PROD_ID
FROM dbo.CUSTOMER_QUOTATION_DETAIL(NOLOCK) QD  

3) 用等号,就好像它是一个公式

SELECT PROD_ID = QD.PRODUCT_ID 
FROM dbo.CUSTOMER_QUOTATION_DETAIL(NOLOCK) QD  

专门针对您的查询,这是 AS 应该去的地方。您必须删除等于并将 AS 放在子查询的末尾。

请注意,您对超出原始问题范围的查询还有其他各种问题。如果您遇到性能问题,请调查 CROSS APPLY / CROSS OUTER JOIN 和/或 CTE : Common Table Expression。

SELECT ROW_NUMBER() OVER (
        ORDER BY QD.DETAIL_ID
        ) AS No
    , QD.PRODUCT_ID AS PROD_ID
    --, PM.'+@ProdCode+' AS PROD_CODE
    , @ProdCode AS PROD_CODE
    , pm.DESCRIPTION AS SHORT_DESC
    , QD.CORPORATE_PRICE AS Corpo_Price
    , CONVERT(DECIMAL(18, 2), QD.RETAIL_PRICE) AS UNIT_SP
    , QD.COST_PRICE AS COST_SP
    , QD.GM
    , QD.DETAIL_ID
    , QD.DISC AS Discount
    , QD.NOTE
    , (
        SELECT TOP 1 (VAT_RATE / 100)
        FROM dbo.vat
        WHERE VAT_ID = (
                SELECT TOP 1 VAT_ID
                FROM dbo.product_detail(NOLOCK)
                WHERE PRODUCT_ID = PM.PROD_ID
                )
        ) AS VAT_RATE
    ,   (
        SELECT TOP 1 IMAGE_DATA
        FROM dbo.PRODUCT_IMAGE
        WHERE PRODUCT_ID = PM.PROD_ID
        ) AS Img
    , QD.CostPrice_Percentage
FROM dbo.CUSTOMER_QUOTATION_DETAIL(NOLOCK) QD
JOIN dbo.product_master(NOLOCK) PM
    ON PM.PROD_ID = QD.PRODUCT_ID

推荐阅读