sql结果显示在特定行中
我有这样一个问题:sql结果显示在特定行中,sql,sql-server,Sql,Sql Server,我有这样一个问题: SELECT MIN(F_Exhibition_Name) AS F_Site_name, (SELECT SUM(F_Quantity) FROM T_assets WHERE T_assets.F_ref_code = T_Item_movement.ItemCode AND F_State = 'A') AS openingqty, CASE WHEN dbo.T_Item_Movement.F_Status = 1 AND
SELECT
MIN(F_Exhibition_Name) AS F_Site_name,
(SELECT
SUM(F_Quantity)
FROM T_assets
WHERE T_assets.F_ref_code = T_Item_movement.ItemCode
AND F_State = 'A')
AS openingqty,
CASE
WHEN dbo.T_Item_Movement.F_Status = 1 AND
dbo.T_Item_Movement.F_Site_Code <> dbo.T_Item_Movement.F_Frm_Site_Code THEN SUM(dbo.T_Item_Movement.F_Quantity)
ELSE 0
END,
CASE
WHEN dbo.T_Item_Movement.F_Status = 2 AND
dbo.T_Item_Movement.F_Site_Code <> dbo.T_Item_Movement.F_Frm_Site_Code THEN SUM(dbo.T_Item_Movement.F_Quantity)
ELSE 0
END
FROM T_Item_movement
LEFT OUTER JOIN T_L2Category
ON T_L2Category.F_ItemCode = T_Item_movement.ItemCode
LEFT OUTER JOIN T_Exhibition
ON T_Exhibition.F_Exhibition_Code = T_Item_movement.F_Site_Code
WHERE F_Cat_code = 'FN'
--AND F_Cat_code IN ('EC', 'EL', 'FL', 'FN', 'GR', 'MX', 'OT', 'SH')
AND F_L1Cat_code = 'TT'
AND itemcode = 'TT015-BLK'
AND CONVERT(varchar(10), F_datetime, 112) >= '20130915'
AND CONVERT(varchar(10), F_datetime, 112) <= '20150915'
AND F_Exhibition_Name IS NOT NULL
GROUP BY ItemCode,
dbo.T_Item_Movement.F_Status,
dbo.T_Item_Movement.F_Site_Code,
dbo.T_Item_Movement.F_Frm_Site_Code
是GROUP BY列导致了这种情况
您可以通过以下方式更改CASE语句以对结果求和,从而删除组中的某些列:
您的未命名列需要在F_Site_Name上聚合和分组。这两行必须具有不同的F_状态、F_站点代码或F_Frm_站点代码这工作正常..我不需要列名?那么我将如何重写?您在我的查询中做了哪些更改?没有列名称,如col1、col2。查询将不起作用。如果没有列名,则无法在其他查询或应用程序中使用结果
Gulf class 2015 6 5
ATM 2015 0 3
SELECT F_Site_name, openingqty,
SUM(col1) AS col1, SUM(col2) AS col2
FROM
(
SELECT
MIN(F_Exhibition_Name) AS F_Site_name,
(SELECT
SUM(F_Quantity)
FROM T_assets
WHERE T_assets.F_ref_code = T_Item_movement.ItemCode
AND F_State = 'A')
AS openingqty,
CASE
WHEN dbo.T_Item_Movement.F_Status = 1 AND
dbo.T_Item_Movement.F_Site_Code <> dbo.T_Item_Movement.F_Frm_Site_Code THEN SUM(dbo.T_Item_Movement.F_Quantity)
ELSE 0
END AS col1,
CASE
WHEN dbo.T_Item_Movement.F_Status = 2 AND
dbo.T_Item_Movement.F_Site_Code <> dbo.T_Item_Movement.F_Frm_Site_Code THEN SUM(dbo.T_Item_Movement.F_Quantity)
ELSE 0
END AS col2
FROM T_Item_movement
LEFT OUTER JOIN T_L2Category
ON T_L2Category.F_ItemCode = T_Item_movement.ItemCode
LEFT OUTER JOIN T_Exhibition
ON T_Exhibition.F_Exhibition_Code = T_Item_movement.F_Site_Code
WHERE F_Cat_code = 'FN'
--AND F_Cat_code IN ('EC', 'EL', 'FL', 'FN', 'GR', 'MX', 'OT', 'SH')
AND F_L1Cat_code = 'TT'
AND itemcode = 'TT015-BLK'
AND CONVERT(varchar(10), F_datetime, 112) >= '20130915'
AND CONVERT(varchar(10), F_datetime, 112) <= '20150915'
AND F_Exhibition_Name IS NOT NULL
GROUP BY ItemCode,
dbo.T_Item_Movement.F_Status,
dbo.T_Item_Movement.F_Site_Code,
dbo.T_Item_Movement.F_Frm_Site_Code
) AS t
GROUP BY F_Site_name, openingqty
...
SUM(CASE WHEN dbo.T_Item_Movement.F_Status = 1 AND ...
THEN dbo.T_Item_Movement.F_Quantity
ELSE 0
END),
...
GROUP BY ItemCode