---
title: "Mikro ERP Satış Raporu SQL Sorgusu: Ürün, Cari ve Dönem Bazlı Analiz"
description: "Mikro ERP'de satış raporu nasıl çıkarılır? STOK_HAREKETLERI tablosundan ürün bazlı, cari bazlı ve aylık dönemsel satış raporlarını çıkaran hazır SQL..."
date: 2026-04-15
category: mikro-erp
tags: ["mikro-erp", "sql-server", "satis-raporu", "stok", "cari", "performans"]
url: https://mikroerp.dev/blog/mikro-erp-satis-raporu-sql/
---

## Sorun: "Bu Ay Ne Kadar Sattık?"

Yönetim her ay soruyor: "En çok ne sattık? Kim ne aldı? Geçen aya göre nasılız?" Mikro'nun standart raporları var ama özelleştirilmiş analiz istiyorsanız SQL şart.

## Hangi Tablo, Hangi Alan?

Satış verileri `STOK_HAREKETLERI` tablosundadır. Filtre koşulları:

| Filtre | Alan | Değer | Açıklama |
|--------|------|-------|----------|
| Satış çıkışı | `sth_tip` | 1 | Çıkış hareketi |
| Fatura | `sth_cins` | 0 | Normal hareket |
| Normal (iade değil) | `sth_normal_iade` | 0 | İade hariç |
| İptal değil | `sth_iptal` | 0 | İptal hariç |

> **Kaynak:** [STOK_HAREKETLERI](https://apidocs.mikro.com.tr/tablo-alan-adlari/stok_hareketleri) · [STOKLAR](https://apidocs.mikro.com.tr/tablo-alan-adlari/stoklar)

## Ürün Bazlı Satış Raporu

En çok satılan ürünler — miktar ve ciro olarak:

```sql
SELECT TOP 50
    STH.sth_stok_kod                              AS [Stok Kodu],
    S.sto_isim                                    AS [Ürün Adı],
    SUM(STH.sth_miktar)                           AS [Toplam Miktar],
    SUM(STH.sth_tutar)                            AS [Toplam Ciro],
    COUNT(DISTINCT STH.sth_evrakno_seri + 
        CAST(STH.sth_evrakno_sira AS VARCHAR))    AS [Fatura Sayısı],
    COUNT(DISTINCT STH.sth_cari_kodu)             AS [Müşteri Sayısı],
    ROUND(SUM(STH.sth_tutar) / 
        NULLIF(SUM(STH.sth_miktar), 0), 2)        AS [Ort. Birim Fiyat]
FROM STOK_HAREKETLERI STH WITH (NOLOCK)
INNER JOIN STOKLAR S WITH (NOLOCK) ON STH.sth_stok_kod = S.sto_kod
WHERE STH.sth_tip = 1                             -- Çıkış
  AND STH.sth_cins = 0                            -- Normal
  AND STH.sth_normal_iade = 0                     -- İade değil
  AND STH.sth_iptal = 0
  AND STH.sth_tarih >= '2026-01-01'
  AND STH.sth_tarih <= '2026-12-31'
GROUP BY STH.sth_stok_kod, S.sto_isim
ORDER BY [Toplam Ciro] DESC;
```

## Müşteri Bazlı Satış Raporu

Hangi müşteri ne kadar alışveriş yaptı:

```sql
SELECT TOP 50
    STH.sth_cari_kodu                             AS [Cari Kodu],
    C.cari_unvan1                                 AS [Müşteri],
    SUM(STH.sth_tutar)                            AS [Toplam Ciro],
    COUNT(DISTINCT STH.sth_evrakno_seri + 
        CAST(STH.sth_evrakno_sira AS VARCHAR))    AS [Fatura Sayısı],
    COUNT(DISTINCT STH.sth_stok_kod)              AS [Ürün Çeşidi],
    MIN(STH.sth_tarih)                            AS [İlk Alım],
    MAX(STH.sth_tarih)                            AS [Son Alım]
FROM STOK_HAREKETLERI STH WITH (NOLOCK)
INNER JOIN CARI_HESAPLAR C WITH (NOLOCK) ON STH.sth_cari_kodu = C.cari_kod
WHERE STH.sth_tip = 1 AND STH.sth_cins = 0 
  AND STH.sth_normal_iade = 0 AND STH.sth_iptal = 0
  AND STH.sth_tarih >= '2026-01-01'
GROUP BY STH.sth_cari_kodu, C.cari_unvan1
ORDER BY [Toplam Ciro] DESC;
```

## Aylık Satış Trendi (Pivot)

Aylara göre satış cirosu:

```sql
SELECT 
    YEAR(sth_tarih)                               AS [Yıl],
    SUM(CASE WHEN MONTH(sth_tarih) =  1 THEN sth_tutar ELSE 0 END) AS [Oca],
    SUM(CASE WHEN MONTH(sth_tarih) =  2 THEN sth_tutar ELSE 0 END) AS [Şub],
    SUM(CASE WHEN MONTH(sth_tarih) =  3 THEN sth_tutar ELSE 0 END) AS [Mar],
    SUM(CASE WHEN MONTH(sth_tarih) =  4 THEN sth_tutar ELSE 0 END) AS [Nis],
    SUM(CASE WHEN MONTH(sth_tarih) =  5 THEN sth_tutar ELSE 0 END) AS [May],
    SUM(CASE WHEN MONTH(sth_tarih) =  6 THEN sth_tutar ELSE 0 END) AS [Haz],
    SUM(CASE WHEN MONTH(sth_tarih) =  7 THEN sth_tutar ELSE 0 END) AS [Tem],
    SUM(CASE WHEN MONTH(sth_tarih) =  8 THEN sth_tutar ELSE 0 END) AS [Ağu],
    SUM(CASE WHEN MONTH(sth_tarih) =  9 THEN sth_tutar ELSE 0 END) AS [Eyl],
    SUM(CASE WHEN MONTH(sth_tarih) = 10 THEN sth_tutar ELSE 0 END) AS [Eki],
    SUM(CASE WHEN MONTH(sth_tarih) = 11 THEN sth_tutar ELSE 0 END) AS [Kas],
    SUM(CASE WHEN MONTH(sth_tarih) = 12 THEN sth_tutar ELSE 0 END) AS [Ara],
    SUM(sth_tutar) AS [Yıl Toplamı]
FROM STOK_HAREKETLERI WITH (NOLOCK)
WHERE sth_tip = 1 AND sth_cins = 0 
  AND sth_normal_iade = 0 AND sth_iptal = 0
GROUP BY YEAR(sth_tarih)
ORDER BY [Yıl];
```

## Satıcı Performans Raporu

Hangi satıcı ne kadar ciro yaptı:

```sql
SELECT 
    CH.cha_satici_kodu                             AS [Satıcı Kodu],
    C.cari_unvan1                                  AS [Satıcı Adı],
    COUNT(DISTINCT CH.cha_kod)                     AS [Müşteri Sayısı],
    SUM(CH.cha_meblag)                             AS [Toplam Ciro],
    COUNT(DISTINCT CH.cha_evrakno_seri + 
        CAST(CH.cha_evrakno_sira AS VARCHAR))      AS [Fatura Sayısı]
FROM CARI_HESAP_HAREKETLERI CH WITH (NOLOCK)
LEFT JOIN CARI_HESAPLAR C WITH (NOLOCK) ON CH.cha_satici_kodu = C.cari_kod
WHERE CH.cha_evrak_tip = 63                        -- Satış faturası
  AND CH.cha_iptal = 0
  AND CH.cha_tarihi >= '2026-01-01'
  AND CH.cha_satici_kodu <> ''
GROUP BY CH.cha_satici_kodu, C.cari_unvan1
ORDER BY [Toplam Ciro] DESC;
```

## Dikkat Edilecekler

1. **İade dahil etmeyin**: `sth_normal_iade = 0` filtresi iade faturalarını hariç tutar. İadeli rapor istiyorsanız ayrı satırda gösterin.
2. **Stok çıkış tipleri**: `sth_cins = 0` sadece fatura çıkışlarını alır. Fire, sarf, transfer çıkışları dahil değildir.
3. **KDV**: `sth_tutar` KDV hariç tutardır. KDV dahil ciro için vergi alanlarını ekleyin.

## İlgili Yazılar

- [Alış-Satış Kâr Analizi](/blog/mikro-erp-alis-satis-kar-analizi-sql/) — Brüt kâr/zarar
- [Son Alış Fiyatı](/blog/mikro-erp-son-alis-fiyati-sql/) — Maliyet karşılaştırma
- [Depo Bazlı Stok Bakiye](/blog/mikro-erp-depo-bazli-stok-bakiye-sql/) — Envanter kontrolü
- [Cari Ekstre Raporu](/blog/mikro-erp-cari-ekstre-raporu-sql/) — Müşteri hesap özeti

---

*Bu rehber [Mikro ERP API Docs](https://apidocs.mikro.com.tr/tablo-alan-adlari/stok_hareketleri) tablo yapısına dayanarak hazırlanmıştır.*